[英]Regex match everything except word
所有關於匹配某些東西的質量檢查, 除了帶有負向超前的單詞 ,我發現這暗示着行的開始/結束( ^
$
)。 但是我不知道如何匹配除已處理文本中間的其他單詞之前的單詞以外的所有內容( .*
等任何字符)。
我應該在<tag></tag>
匹配ABC
:
...<tag>a a.__aABC&*</tag>aaa<tag>ffff</tag>...
但不在外面(假陽性):
...<tag>a a.__a&*</tag>ABC<tag>ffff</tag>...
因此,我認為我應該排除ABC
之前的標簽關閉( </tag>
)。 我試過了:
<tag>(?!<\/tag>)ABC.*?<\/tag>
但是這樣一來, 除了</tag>
在ABC
之前,不允許匹配.*
。 我該如何實施?
有用的鏈接:
由於您使用的是Perl / PCRE,因此最快的方法是這樣的:
/(?s)<tag>(?:<\\/tag>(*SKIP)(*FAIL)|.)*?ABC.*?<\\/tag>/
https://regex101.com/r/AoiwIH/1
擴展
(?s)
<tag>
(?:
</tag>
(*SKIP) (*FAIL)
|
.
)*?
ABC
.*?
</tag>
基准與斷言方法的比較
Regex1: (?s)<tag>(?:</tag>(*SKIP)(*FAIL)|.)*?ABC.*?</tag>
Completed iterations: 50 / 50 ( x 1000 )
Matches found per iteration: 1
Elapsed Time: 0.25 s, 254.91 ms, 254905 µs
Matches per sec: 196,151
Regex2: (?s)<tag>(?:(?!</tag>).)*?ABC.*?</tag>
Completed iterations: 50 / 50 ( x 1000 )
Matches found per iteration: 1
Elapsed Time: 0.33 s, 329.10 ms, 329095 µs
Matches per sec: 151,931
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.