讓我們假設我想匹配單詞「貓」,但這個詞之前,不應該在同一行正則表達式 - 禁用同一行的具體子
匹配的是單詞「鼠標」:
Hello, cat!
匹配
Hello, mouse!
Hello, cat!
不匹配
Hello, mouse and cat
但它應該正確處理任何行,例如,只是「貓」也應該匹配。 我有一個正則表達式不工作
(?!\bmouse\b)[^\n]*cat
五月有人幫助嗎?由於
讓我們假設我想匹配單詞「貓」,但這個詞之前,不應該在同一行正則表達式 - 禁用同一行的具體子
匹配的是單詞「鼠標」:
Hello, cat!
匹配
Hello, mouse!
Hello, cat!
不匹配
Hello, mouse and cat
但它應該正確處理任何行,例如,只是「貓」也應該匹配。 我有一個正則表達式不工作
(?!\bmouse\b)[^\n]*cat
五月有人幫助嗎?由於
發帖,因爲我在評論答案爲你工作。
可以使用受約束的寬度回顧後(一用一限制性量詞):
"(?<!\\bmouse\\b.{0,1000})\\bcat\\b"
由於最小和最大限制是已知的,引擎知道可能回顧後發模式長度。
模式擊穿:
(?<!\\bmouse\\b.{0,1000})
- 檢查是否存在具有0至1000的任何字符分隔的當前位置,但換行符\\bcat\\b
之前整個字mouse
- 全字cat
試試這個正則表達式負前瞻:
^(?!.*?\bmouse\b.*\bcat\b).*
(?!.*?\bmouse\b.*\bcat\b)
爲負先行斷言失敗時mouse
在同一行cat
之前是存在的。 \b
用於字邊界斷言。
你是什麼正則表達風味/語言使用? – anubhava
我想你可以試試['^(?!。* \ bmouse \ b。* \ bcat \ b)。*'](https://regex101.com/r/hU6kV9/1)。但是,它將匹配整條線。你需要一個無限寬度的負向lookbehind才能匹配沒有在'mouse'前面的'cat'。這取決於你使用的正則表達式庫。請參閱['(?<!\ bmouse \ b。*)\ bcat \ b' demo](http://regexstorm.net/tester?p=(%3f%3c!%5cbmouse%5cb。*)%5cbcat% 5cb&i =您好%2c +小鼠!%0d%0a您好%2c +貓!%0d%0aNot +匹配%0d%0a%0d%0a您好%2c +鼠標+和+貓) –
@anubhava,java.util.regex – Ivan