因爲我一直在使用preg_replace_callback更換參考ID出現的任何進入打開的引用鏈接很長一段時間。preg_replace_callback發生,除非存在反斜槓字符0-20提前
例如, 「BIZ1234」 將與名稱標題(僞代碼)
所有好的替代。
但現在我需要不做更換如果反斜槓之前的比賽。
例如,如果「BIZ1234」中的文件夾路徑時:\ drive_C \ BIZ1234
爲此,我已經試過了很多的正則表達式,並幾乎得到了我所需要的,但我的技能正則表達式是不夠的。
當前正則表達式:
/BIZ(\d+)/i
排除出現嘗試在反斜槓之前的比賽:
/[^\\\\]BIZ(\d+)/i
這工作,如果反斜槓是BIZ權盈。 我知道我必須設置某種限制,以反斜槓能走多遠背面。所以我嘗試:
/[^\\\\](.{0,20})BIZ(\d+)/i
這個替換太多,不關心反斜槓。
我已經閱讀並閱讀,但就是無法把握住這些正則表達式。幫幫我! :-)
EDIT/ADDED:目前
<p>This should become a link BIZ1234</p>
<p>this/here/should/too BIZ1234</p>
<p>but\this\here\shouldn't BIZ1234</p>
,使用該正則表達式:
我使用作爲測試字符串以下(以下爲字符串)
/^([^\\\]+)BIZ(\d+)/
取代上述字符串中的任何內容。
'[^ \\\\]'沒有多大意義:'[^ ...]'指任何字符*不*的'...',所以沒必要一個重複反斜槓。你可能想看看[lookarounds](http://www.regular-expressions.info/lookaround.html)。 – Biffen
@biffen,在傳遞給Preg_replace_callback的PHP字符串的上下文中是有意義的:由於反斜槓是正則表達式中的一個特殊字符,因此您必須將其轉義 - 使\\表示正則表達式中的_one_反斜槓。它也是PHP字符串中的一個特殊字符,所以它也必須在那裏轉義 - 我們在這裏有兩個反斜槓,它們是字符串中的內容,而每個字符都會使用_four_反斜槓。 – CBroe
@CBroe我認爲regexen顯示的是* un-escaped *,因爲裏面有'\ d'。 – Biffen