這裏只分享一些我經常使用的正則式技巧,都是結合個人實際使用爲例html
https?://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]
有些特例也會被匹配到,好比 http://.com
,畢竟url不容易驗證[\u4e00-\u9fa5]
有時候要求輸入數字英文和漢字,能夠這麼寫:[\d|\w|\u4e00-\u9fa5]+?
\p{Digit}+
, [0-9]+
, \d+
<html>(.*?)</html>
默認.
並不匹配換行符,須要使用<xxx>([\s\S]*?)</xxx>
來匹配$()*+.[]?\^{}|git
有的時候咱們要匹配指定前綴,不免會有一些特殊字符,好比: $(xxx)-01 , $(xxx)-02 , $(xxx)-03 這裏涉及到escape的字符,須要替換,不然會當作正則式的特殊符號處理 正常都是replaceAll解決,其實有更簡單的辦法 咱們能夠經過 ** Pattern.quote
** 解決 String regex=Pattern.quote("$(xxx)-") + "\\d+";
數組
\b表示完整單詞 \B表示單詞內局部內容 好比在編輯器裏搜索,一般編輯器裏都支持正則式的搜索,搜索變量 abc
能夠搜索 \babc\b
這是我經常使用的方法mybatis
對於文件後綴,咱們能夠忽略大小寫,這裏咱們要用到一個技巧: (?i)
不會區分大小寫,若是表示一段區間,能夠用(?-i)
結束 好比上面的例子,咱們能夠這麼寫 "^.+\\.(?i)(xls)(?-i)$"
能夠直接用字符串的match
方法匹配 "abcdef.XLS".matches("^.+\\.(?i)(xls)(?-i)$");
app
類型 | 說明 |
---|---|
CANON_EQ | 啓用規範等價。 |
CASE_INSENSITIVE | 啓用不區分大小寫的匹配。 |
COMMENTS | 模式中容許空白和註釋。 |
DOTALL | 啓用 dotall 模式。 |
LITERAL | 啓用模式的字面值解析。 |
MULTILINE | 啓用多行模式。 |
UNICODE_CASE | 啓用 Unicode 感知的大小寫摺疊。 |
UNIX_LINES | 啓用 Unix 行模式。 |
這裏我比較經常使用的就是CASE_INSENSITIVE
和UNICODE_CASE
,MULTILINE
偶爾也會用得上dom
有的時候咱們可能須要大量重複但格式近似的文件,好比ibatis或mybatis的domain,mapper這些文件,每一個人的風格不一樣,複製粘貼須要修改不少地方,且易出錯 咱們能夠把須要修改的地方用本身定義的佔位符替換掉,這裏簡單說思路,可能有不完善處:編輯器
Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE); Matcher m = p.matcher(input); while (m.find()) { String temp2=m.group(1); temp.add(temp2); }
res=res.replaceAll("<demo>([\\s\\S]*?)</demo>","%s");
res=String.format(res,list.toArray());