簡體   English   中英

正則表達式匹配除提供的字符串之外的所有內容

[英]Regex match everything except string provided

我無法理解如何使用正則表達式,以便它匹配除提供的字符串之外的所有內容。 我試過使用否定操作數?! 例如(?!red|green|blue)但是這似乎也不起作用。

假設我有一個如下所示的字符串:

red blue green purple

我想在green上進行否定匹配,以便我的結果匹配是:

red blue purple

我怎么能做到這一點?

你在正確的軌道上(?. ... ) ,但你必須記住,這是一個否定的前瞻,而不僅僅是一個否定運算符。 這意味着它會驗證當前 position 之后的文本與您的前瞻中的模式匹配,如果是,它將在 position 處匹配失敗。 它本身匹配任何東西。 你仍然需要圍繞它建立一個模式。 這是一個如何編寫這樣一個模式的示例:

(^| )(?!green)[^ ]*
  • (^| )字符串開頭文字空格字符
  • (?!green)斷言字符串中的下一個字符與“green”不匹配
  • [^ ]*將所有內容匹配到下一個空格。 我們可以安全地做到這一點,因為如果它是“綠色”,則前瞻將已經失敗。

輸入字符串:

red blue green purple

火柴:

red blue purple

注意:看看你是如何在 regex101 上測試模式的,我會指出這個模式會將每個以空格分隔的項目作為單獨的匹配項進行匹配。 無法在正則表達式中匹配非連續字符串,因此這是您將獲得的最接近的解決方案。 如果您需要一個單一的非連續匹配,您將需要重新編寫程序或使用正則表達式以外的東西。

您可以在綠色上匹配並將其替換掉,而不是在綠色上匹配。



例如在 PostGres 中:

select regexp_replace('red blue green purple','(green)','','g');

您還需要添加要捕獲的內容,您正在尋找的正則表達式似乎就是這個

^(?!red|green|blue)([a-z0-9]+)$

暫無
暫無

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

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