(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 代表數...