在使用Pattern.compile函數時,可以加入控制正則表達式的匹配行為的參數:
?
flag的取值范圍如下:?
以上內容中提到的Pattern.UNIX_LINES(?d)完整的相關解釋如下:
????? 默認情況下(沒有使用UNIX——LINES時)是識別完整的行終結符,匹配文本行邊界的元字符會把CR/LF視為不可分隔的單位,一次性匹配這兩個字符。
????? 舉例來說,$和\Z通常會匹配行終結符之前的位置。LF是行終結符,但只有在它不屬于CR/LF(也就是說,LF之前沒有CR)的情況下,$和\Z才能匹配字符串末尾的LF之前的位置。
????? MUTILINE模式中的$和^也是如此,在這種模式下,只有在CR之后沒有LF的情況下,^才能匹配CR之后的位置;只有在LF之前不是CR的情況下,$才能匹配LF之前的位置。
????? 必須說清楚的是,DOTALL對CR/LF的處理沒有影響(DOTALL只影響點號,而點號總是逐個處理字符的),UNIX——LINES根本不存在此類問題(它只識別CR,所有其它行終結符都不需要特殊處理)。
?
注:
Pattern Pattern.compile(String regex, int flag)
flag的取值范圍如下:?
Pattern.CANON_EQ 當且僅當兩個字符的"正規分解(canonical decomposition)"都完全相同的情況下,才認定匹配。比如用了這個標志之后,表達式"a\u030A"會匹配"?"。默認情況下,不考慮"規范相等性(canonical equivalence)"。?
Pattern.CASE_INSENSITIVE(?i) 默認情況下,大小寫不明感的匹配只適用于US-ASCII字符集。這個標志能讓表達式忽略大小寫進行匹配。要想對Unicode字符進行大小不明感的匹配,只要將UNICODE_CASE與這個標志合起來就行了。?
Pattern.COMMENTS(?x) 在這種模式下,匹配時會忽略(正則表達式里的)空格字符(譯者注:不是指表達式里的"\\s",而是指表達式里的空格,tab,回車之類)。注釋從#開始,一直到這行結束。可以通過嵌入式的標志來啟用Unix行模式。
Pattern.DOTALL(?s) 在這種模式下,表達式'.'可以匹配任意字符,包括表示一行的結束符。默認情況下,表達式'.'不匹配行的結束符。
Pattern.MULTILINE (?m) 在這種模式下,'^'和'$'分別匹配一行的開始和結束。此外,'^'仍然匹配字符串的開始,'$'也匹配字符串的結束。默認情況下,這兩個表達式僅僅匹配字符串的開始和結束。?
Pattern.UNICODE_CASE (?u) 在這個模式下,如果你還啟用了CASE_INSENSITIVE標志,那么它會對Unicode字符進行大小寫不明感的匹配。默認情況下,大小寫不敏感的匹配只適用于US-ASCII字符集。?
Pattern.UNIX_LINES(?d) 在這個模式下,只有'\n'才被認作一行的中止,并且與'.','^',以及'$'進行匹配
以上內容中提到的Pattern.UNIX_LINES(?d)完整的相關解釋如下:
????? 默認情況下(沒有使用UNIX——LINES時)是識別完整的行終結符,匹配文本行邊界的元字符會把CR/LF視為不可分隔的單位,一次性匹配這兩個字符。
????? 舉例來說,$和\Z通常會匹配行終結符之前的位置。LF是行終結符,但只有在它不屬于CR/LF(也就是說,LF之前沒有CR)的情況下,$和\Z才能匹配字符串末尾的LF之前的位置。
????? MUTILINE模式中的$和^也是如此,在這種模式下,只有在CR之后沒有LF的情況下,^才能匹配CR之后的位置;只有在LF之前不是CR的情況下,$才能匹配LF之前的位置。
????? 必須說清楚的是,DOTALL對CR/LF的處理沒有影響(DOTALL只影響點號,而點號總是逐個處理字符的),UNIX——LINES根本不存在此類問題(它只識別CR,所有其它行終結符都不需要特殊處理)。
?
注:

更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
