java正規表示式相關問題

2021-05-22 23:30:13 字數 1236 閱讀 8405

(1)pattern pt=pattern.compile("]*>.*?", pattern.case_insensitive |pattern.dotall);

matcher mt=pt.matcher(htmlcontent);

while(mt.find())

如果用以下語句的話:

(2)pattern pt=pattern.compile("]*>(.|/n|/r)*?", pattern.case_insensitive );

matcher mt=pt.matcher(htmlcontent);

while(mt.find())

但內容足夠大時,因為mt.group();是通過遞迴查詢符合正規的字元,但(.|/n|/r)*?是通過三個分支查詢,當內容足夠大

而內在不夠大時會造成記憶體溢位,因此用語句(1)的表示式做正規匹配一次性匹配更可以提高效能,也不會造成記憶體溢位

pattern.case_insensitive——啟用不區分大小寫的匹配。(? i)

pattern.comments——允許在模式中使用空白和注釋。(? x)

pattern.dotall——啟用dotall模式。在dotall模式下,表示式.匹配任何字元,包括行終止符。預設情況下,這個表示式不匹配行終止符。(? s)

pattern.literal——啟用模式的字面量解析。指定了這個標誌時,指定模式的輸入字串被當作字面量字元的序列。輸入序列中的元字元或者轉移 序列沒有特殊含義。和這個標誌結合使用時,標誌case_insensitive和unicode_case保留它們對匹配的影響。

pattern.multiline——啟用多行模式。在多行模式下,表示式^和$分別正好在行終止符或者輸入序列的末尾的之前或者之後。預設情況下,這些表示式只匹配整個輸入序列的開頭和結尾。也可以通過嵌入標誌表示式(? m)啟動多行模式。

嵌入標誌表示式

常    量

等效的嵌入標誌表示式

pattern.canon_eq

無pattern.case_insensitive

(?i)

pattern.comments

(?x)

pattern.multiline

(?m)

pattern.dotall

(?s)

pattern.literal

無pattern.unicode_case

(?u)

pattern.unix_lines

(?d)

正規表示式 相關

限定符 說明 指定零個或更多個匹配 例如 w 或 abc 等效於。指定乙個或多個匹配 例如 w 或 abc 等效於。指定零個或乙個匹配 例如 w?或 abc 等效於。指定恰好 n 個匹配 例如 pizza 指定至少 n 個匹配 例如 abc 指定至少n 個但不多於m 個匹配。指定盡可能少地使用重複的...

正規表示式相關

我們知道匹配字串通常用正規表示式,因為幾乎每種語言都有自己的正規表示式引擎,所以效率會比你自己寫演算法要高效的多。下面來看下一些常用的正規表示式運算子。注意 這裡主要是個人總結,所以都會以一些自己用到的東西為主,如果要看具體的api,請在網上查詢 基礎知識儲備 稍微注意下一些細節的地方,比如 和 的...

正規表示式相關

table 特殊符號 代表意義 alnum 代表英文大小寫字元及數字,亦即 0 9,a z,a z alpha 代表任何英文大小寫字元,亦即 a z,a z blank 代表空白鍵與 tab 按鍵兩者 cntrl 代表鍵盤上面的控制按鍵,亦即包括 cr,lf,tab,del.等等 digit 代表數...