簡體   English   中英

正則表達式匹配如何工作?

[英]How does a regex matching work?

這個問題源於本論壇中的另一個問題,我認為這很簡單,但最后卻發現了一個難題。

OP要求將所有子字符串<tagname>xyz</tagname>的所有文本xyz替換為NEW TEXT 我做了以下事情:

String str="<tagname>bgerh</tagname>sdfghuhjg<tagname>bgew</tagname>rwesdgrhtf<tagname>bfgh</tagname>";

System.out.println(str.replaceAll("(?<=(<tagname>)).*(?=(</tagname>))","NEW TEXT"));

我得到的輸出:

<tagname>NEW TEXT</tagname>

這顯然不是想要的。

因此,我想知道正則表達式檢查是否發生在字符串的兩端,我將為示例的解決方案感到高興。 提前致謝。

.*是貪婪的量詞,表示它將匹配所有可能的內容。 因為您的示例字符串以<tagname>開頭並以</tagname>結尾,所以之間的所有內容都將以.*進行匹配。

要解決此問題,您可以改用勉強的量詞,它只會盡可能少地抓取。 勉強的限定詞看起來像這樣: .*? ,因此整個表達式如下所示:

"(?<=<tagname>).*?(?=</tagname>)"

我通常通過在正則表達式的內部排除<來做到這一點。 喜歡:

(?<=<tagname>)[^<]*(?=</tagname>)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM