如果字符串在 php 中有 if 条件,preg_replace 不工作

preg_replace is not working if string has if condition in php

我正在使用 preg_replace 在字符串

中查找和替换

我的字符串是$string = if ($('input[name="name[3]"]').is(":checked")) {

我只是想被""包围所以我试了一下

$find = "/(if \($\('input\[name=\"name\[3\]\"\]'\).is\(\":checked\"\)\) {)[\s]+/";
$replace = '""';
preg_replace($find, $replace, $string);

当我 运行 这个查询时,我看不到字符串有任何变化,我的意思是没有双引号。

我在这里做了很多事情,但我无法提供所有内容,对此深表歉意。

更新:在 sublimeText3 中它像查找和替换一样工作正常

注意:我相信是因为 $ 符号

问题

您的正则表达式被双引号括起来,这导致了美元符号转义问题 $

解决方案 1

你可以试试这个正则表达式:

/(if\s\([$]\('input\[name=\"name\[3]\"]'\)\.is\(\":checked\"\)\)\s{)[\s]*/

这是我所做的更改:

  1. $[$]。如果您将其更改为 \$
  2. ,它也会起作用
  3. reasons-for-visit\[3\]name\[3] 不确定这是错字还是什么,如果需要可以改回来。
  4. [\s]+[\s]* 因为 + 是一个或多个。如果后面没有 space 就不行了。

所以会是:

$find = "/(if\s\([$]\('input\[name=\"name\[3]\"]'\)\.is\(\":checked\"\)\)\s{)[\s]*/";
$replace = '""';
preg_replace($find, $replace, $string);

var_dump 结果将是:

string(50) ""if ($('input[name="name[3]"]').is(":checked")) {""

解决方案 2

您可以在正则表达式中使用单引号。


示例 1

$string = 'Hello $World';
$regex = "/$/";
var_dump(preg_replace($regex, '!', $string));

结果 1

string(13) "Hello $World!"

示例 2

$string = 'Hello $World';
$regex = '/$/'; // Notice the single quote
var_dump(preg_replace($regex, '!', $string));

结果 2

string(12) "Hello !World"

示例 3

$string = 'Hello $World';
$regex = "/\$/";
var_dump(preg_replace($regex, '!', $string));

结果 3

string(12) "Hello !World"