簡體   English   中英

正則表達式匹配除此正則表達式之外的所有內容

[英]Regex to match everything except this regex

我認為對很多人來說這是一件簡單的事情,但目前我對正則表達式的知識非常有限。 我希望匹配除字符串中的兩位數字之外的所有內容。

例如:

測試 22 KLO4567

QE 45 C2C

LOP 10 G7G400

現在我發現正則表達式匹配兩位數字:\\ d {2}

符合以下條件:

測試22 KLO4567

QE 45 C2C

LOP 10 G7G400

現在在我看來,將這個正則表達式轉換為匹配所有內容但是“\\ d {2}”相當容易。 我搜索了很多,但我似乎無法完成它。 我希望這里有人可以提供幫助。

這僅適用於正則表達式引擎支持后面的內容:

^.+?(?=\d{2})|(?<=\d{2}).+$

說明:

| 將兩種情況分開:

  • ^ +?(?= \\ d {2})

這匹配從字符串開頭( ^ )到遇到\\d{2}內容。

  • (?<= \\ d {2})。+ $

這匹配字符串的結尾,從兩位數后面的位置。

如果你的正則表達式引擎不支持外觀(例如JavaScript),我認為使用純正則表達式解決方案是不可能的。

你可以匹配第一部分:

^.+?(?=\d{2})

然后獲取匹配結束的位置,將2添加到該數字,並從該索引獲取子字符串。

你正確拒絕正則表達式中的搜索通常是相當棘手的。

在你的情況下,我認為你想要[^\\d{2}] ,但是,這很棘手,因為你的其他字符串也包含兩位數,所以使用它的正則表達式不會選擇它們。

我會使用這個正則表達式(使用PCRE 8.36但也應該在其他人工作):

\\*{2}\\w*\\*{2}

說明:

\\*{2} ....精確地匹配“*”兩次
\\w* ....匹配“單詞字符”零或無限次

找到一個正則表達式很簡單:

^(.*?[^\d])\d{2}([^\d].*?)$

解釋:

  • ^:匹配行的開頭
  • (。*?[^ \\ d]):匹配並捕獲兩個數字之前的第一部分。 它可以包含任何東西(。*?),但需要以不同的數字([^ \\ d])結束,所以我們確保中間只有2個數字
  • \\ d {2}:是你自己找到的部分
  • ([^ \\ d]。*?):是(。*?[^ \\ d])的對稱:從不同於數字([^ \\ d])的東西開始,然后匹配任何東西。
  • $:直到最后一行。

要測試此reges,您可以使用此鏈接

它將匹配第一次出現的兩位數,但因為OP說只有一個它正確地完成了工作。 我希望它可以與每個正則表達式引擎一起使用,因為沒有太復雜的使用。

暫無
暫無

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

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