假設以下字符串:正則表達式:匹配模式,只要它不是在一開始
aaa bbb ccc
bbb aaa ccc
我想只要匹配aaa
,因爲它是不是在字符串的開頭。我試圖通過做這樣的事情否定它:
[^^]aaa
但我不認爲這是正確的。使用preg_replace
。
假設以下字符串:正則表達式:匹配模式,只要它不是在一開始
aaa bbb ccc
bbb aaa ccc
我想只要匹配aaa
,因爲它是不是在字符串的開頭。我試圖通過做這樣的事情否定它:
[^^]aaa
但我不認爲這是正確的。使用preg_replace
。
您可以使用後面的內容來確保它不在開頭。 (?<!^)aaa
無論如何否定位置斷言? – StackOverflowNewbie 2013-03-27 21:15:59
我仍然需要捕獲'aaa'。只是用括號包起來? – StackOverflowNewbie 2013-03-27 21:19:22
更新後的正則表達式將在組0中捕獲它。 – Joe 2013-03-27 21:20:01
如果你不想使用回顧後,然後使用這個表達式:
/.(aaa)/
並使用matched group # 1
。
這是最好的答案,因爲它可以與其他正則表達式的方言一起使用。 – tmalsburg 2018-02-12 09:45:09
自從我來到這裏,通過谷歌搜索,併爲感興趣的是一個解決方案,不使用後視,這裏是我的2美分。
的[^^]aaa
圖案和比^
其他一個字符,然後3 a
小號任何地方在字符串內相匹配。 [^...]
是negated character class其中^
不被視爲特殊字符。請注意,在[
之後的第一個^
是特殊的,因爲它表示否定,而第二個僅僅是文字插入符號。
因此,^
不能在[...]
之內以表示字符串的開始。
一個解決方案是使用任何負面環視,這兩個將工作同樣出色:
(?<!^)aaa
和前瞻:
(?!^)aaa
爲什麼先行的作品,太? Lookarounds是零寬度斷言,並且錨也是零寬度 - 它們不消耗文本。從字面上看,(?<!^)
會檢查當前位置左側是否沒有立即開始字符串位置,並且(?!^)
會檢查當前位置右側是否沒有字符串開始位置。同樣的地點正在檢查,這就是爲什麼兩個工作正常。
感謝您的前瞻性選擇,因爲Javascript還不支持後臺管理。 – 2018-01-11 18:02:13
你只匹配'aaa'嗎?用什麼替換它? – 2013-03-27 21:22:48