[英]PHP negative lookahead regex not working
我試圖在我的PHP應用程序中構造一個正則表達式,該正則表達式采用一個變量,例如$search
,並將其替換為另一個變量。 我要特別嘗試的是僅在$search
值不直接跟有=
替換它。
到目前為止,我嘗試過的是:
preg_replace("/($search)(?!=)/i", $replacement, $string, -1, $count);
但這沒有用。 我確定我只是誤解了一些東西,但是我似乎無法確定那是什么。 我對regex相當陌生,並且已經查看了先前問題中的幾個答案,但無法弄清楚。
如果您需要其他任何信息,請告訴我。
編輯
為了澄清,假設以下代碼:
$searchTerm = "Hello";
$search = "/($searchTerm)(<?!=)/i";
$replacement = '<span style="background:red;">$0</span>';
$result = preg_replace($search, $replacement, $string, -1, $count);
$ string的值類似於:
$string = "hello=hola";
因此,我們的想法是,如果“ hello”后面沒有加“ =”,它將以紅色突出顯示,但是如果沒有,則什么也不會發生。 假設$ string的值可以更改。 我知道這是非常la腳的例子,但希望它能使它有所清除。
實際上,您需要在模式中使用反斜杠\\
來使$
字符轉義。 另外,為了使其更加自信,您可以添加\\s*
,這表示=
字符之前有零個或多個空格。
使用以下模式:
/\$search(?!\s*\=)/i
/
分隔符 \\$
$
從字面上匹配$
search
從字面上匹配該詞 (?!
否定的Lookahead,它檢查在該變量名之后是否同時包含空格(如果存在)和=
。 /i
modifire使模式不敏感( az
和AZ
之間沒有任何區別) 注意:上面的'/pattern/'
必須使用單引號'/pattern/'
。 如果要使用雙引號"
,則應再次轉義反斜杠:
/\\$search(?!\\s*\\=)/i
$
是正則表達式中的錨點,用於匹配行尾,因此,由於它是一個特殊字符,因此必須對其進行轉義。
您可以使用:
preg_replace("/(\\$search)(?!=)/i", $replacement, $string, -1, $count);
要么
preg_replace('/(\$search)(?!=)/i', $replacement, $string, -1, $count);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.