如果字符串在php中有条件,则preg_replace不起作用

时间:2017-08-04 17:28:00

标签: php preg-replace

我在字符串

中使用preg_replace进行查找和替换

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

我只想围绕"",所以我尝试了

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

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

我在这里做了很多事,但我无法提供所有东西,对不起。

更新:在sublimeText3中,它的工作正常,如查找和替换

注意:我相信因为$ sign

1 个答案:

答案 0 :(得分:0)

问题

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

解决方案1 ​​

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

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

以下是我改变的内容:

  1. \$[$]。如果您将其更改为\\$
  2. ,它也会有效
  3. reasons-for-visit\[3\]name\[3]不确定这是否是拼写错误或其他内容,如果需要,可以将其更改回来。
  4. [\s]+[\s]*,因为+是一个或多个。如果之后没有空间,它将无法工作。
  5. 所以它会是:

    $find = "/(if\s\([$]\('input\[name=\"name\[3]\"]'\)\.is\(\":checked\"\)\)\s{)[\s]*/";
    $replace = '"$1"';
    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"