簡體   English   中英

正則表達式匹配單詞以外的所有內容

[英]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之前,不允許匹配.* 我該如何實施?

有用的鏈接:

12

由於您使用的是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.

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