簡體   English   中英

PHP否定前瞻正則表達式不起作用

[英]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使模式不敏感azAZ之間沒有任何區別)

注意:上面的'/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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM