正規表示式 - 其中字串包含“bar”但前面沒有“foo”

正規表示式 - 其中字串包含“bar”但前面沒有“foo”

我目前有一個正規表示式來匹配字串包含“bar”但前面沒有“foo”的地方:

(?<!foo)bar

我希望修改正則表達式以匹配字串包含“bar”但前面沒有“foo”和(可選)任何其他字元的位置。

例如。 “footestbar”不應匹配,因為 bar 前面是“foo”,後面是“test”。

我找不到實現此目的的方法,因為正規表示式不允許在負向後查找中使用量詞。隨後我無法執行以下操作:

(?<!foo.*)bar

有替代方法嗎?

更新:
正規表示式的味道是重新2。我目前正在查看文檔,但乍一看注意到以下內容:

(?<!re)     after text not matching re (NOT SUPPORTED)

因此,該解決方案不能使用負向後查找(如果我正確解釋文件)。

答案1

修改後的帖子

因此,似乎某些(大多數?)正規表示式引擎僅適用於固定長度的lookbehind。然而,他們似乎可以接受可變長度的前瞻。我不確定你的用例是什麼或它的可行性如何,但一個想法可能是反轉你的字串,並使用:

rab(?!.*oof)

在此輸入影像描述

當然,它看起來很可笑,我不知道你如何使用它,或者它會有多大用處。我在 Regex 的大部分經驗都是使用 .NET,大多數不需要回顧。只是給你一個想法..!

原始貼文 - 僅適用於某些正規表示式引擎(使用.NET進行測試)

試試以下正規表示式:

(?<!foo(?:.*)?)bar

這會在相同的負向後查找中新增一個可選的非捕獲組。

在此輸入影像描述

相關內容