如果字符串在 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]*/
这是我所做的更改:
$
到 [$]
。如果您将其更改为 \$
,它也会起作用
reasons-for-visit\[3\]
到 name\[3]
不确定这是错字还是什么,如果需要可以改回来。
[\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"
我正在使用 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]*/
这是我所做的更改:
$
到[$]
。如果您将其更改为\$
,它也会起作用
reasons-for-visit\[3\]
到name\[3]
不确定这是错字还是什么,如果需要可以改回来。[\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"