日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 正则 懒惰_正则表达式懒惰模式

發布時間:2025/3/20 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 正则 懒惰_正则表达式懒惰模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在寫BLOG練習程序的時候,考慮到用BBS直接輸入可能會更加簡潔些。但是如何轉換又成了一個問題。

在群里問了問朋友,一致認同使用正則表達式最好。于是又翻起了那篇我覺得很好的正則表達式三十分鐘入門,看了很多篇,動手的也就這一次了。。

動起手來才發現不是這么簡單,起先由于只考慮到靜態鏈接的規則(其實那時靜態寫的比這下面寫的復雜多了),沒有辦法又準備寫一些動態鏈接的規則,但是一看動態的格式好像十分復雜,就干脆用.+來匹配了。

Codec=Regex.Replace(c,@"\[URL\](?[^\s]+)\[/URL\]","${url}",?RegexOptions.Compiled);

后來才發現一個很嚴重的問題。如果其中的鏈接地址為www.xxx.com的話那么打開鏈接時,會發現它居然會作為你的子路徑打開。

沒辦法又重新加了一個能夠驗證協議頭的正則(我也不知道有沒有2兩個字符開頭的協議。。。)

Codec=Regex.Replace(c,@"\[URL\](?([a-zA-z]{3,}://)[^\s]+)\[/URL\]","${url}",?RegexOptions.Compiled);

當然這個匹配必須在上一個匹配之上。

查看了模仿的博客才發現,原來MAIL地址前是要加mailto://協議頭的。

Codec=Regex.Replace(c,@"\[EMAIL=(?[A-Z0-9a-z\.]+@[a-zA-Z]{2,}\.[a-zA-z]{2,3})\](?[^\s]+?)\[/EMAIL\]","${title}",?RegexOptions.Compiled);

c=Regex.Replace(c,@"\[EMAIL\]([A-Z0-9a-z\.]+@[a-zA-Z]{2,}\.[a-zA-z]{2,3})\[/EMAIL\]","$1",?RegexOptions.Compiled);

考慮大多數用戶習慣直接輸入郵件地址不會包含maito://協議頭的。所以沒有寫這個規則了。

后來又發現一個問題如果文中有多個URL的話,由于.+的緣故會導致匹配出許多我們不是我們想要的字符。起先思路一直停留在,其中不能包含[/URL]字符串,

由于嘗試了很多次方法,最后才不得不得出一個結論(希望哪位能夠指正出是否正確):

Code/[URl/].+[^(URL)]/[/URL/]/[URl/].+[^/bURL\b)]/[/URL/]

中括號只能匹配范圍。

就是這個簡單的問題困擾了我整整兩天。

今天群里的朋友提起可以參看別人的URL匹配規則,于是又搜索了一次(比我這詳細多了)

認真地看了幾次后,終于發現了另一種思維,懶惰模式,匹配盡可能少的字符。

于是最后就可以寫成這樣:

Codec=Regex.Replace(c,@"\[URL\](?[^\s]+?)\[/URL\]","${url}",?RegexOptions.Compiled);

還是浮躁了些,沒有認真看完那篇教程。害得自己一直在苦鉆牛角尖啊。

總結

以上是生活随笔為你收集整理的java 正则 懒惰_正则表达式懒惰模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。