PHP preg_replace 匹配特殊字符 '$' 时的意外输出
PHP preg_replace unexpected Output in case of matching special Character '$'
我在 PHP 脚本中遇到问题,如果此函数用于正则表达式匹配和替换。
我在 www.regex101.com 上测试了我的正则表达式并得到了预期的结果,但在 PHP.
中却没有
我在函数中使用了这个模式:
$matchedName = preg_replace("/^($|\(.+\))( ?)/", "", $name);
匹配字符“$”或开头括号中的任何表达式并将其删除。任何带括号的输入都可以正常工作。
$name = "$ blah";
$matchedName = preg_replace("/^($|\(.+\))( ?)/", "", $name);
var_dump($matchedName);
Output:
string(8) "$ blah"
现在,我是不是误会了什么?或者这个函数在“$”字符的情况下真的是一个问题?
感谢任何回复
你需要转义\
,所以你的代码应该是:
$name = "$ blah";
$regex = "/^(\$|\(.+\))( ?)/";
$matchedName = preg_replace($regex, "", $name);
var_dump($regex);
var_dump($matchedName);
问题是你在双引号中 ("..."
),所以 PHP 解释器将第一个 \
解释为只是转义字符串中的 $
,而不是文字 \
。为了转义正则表达式中的字符,它需要是文字 \
。
因此,在处理器解释后,您的实际正则表达式如下所示:/^($|\(.+\))( ?)/
。您需要转义双引号内的 $
和 在正则表达式上下文中提供斜杠,因此您添加 \
.
请注意,您可以通过简单地使用单引号 ('...'
) 来避免这种情况,您只需要 $
而不是 \$
:
$name = "$ blah";
$regex = '/^($|\(.+\))( ?)/';
$matchedName = preg_replace($regex, "", $name);
var_dump($regex);
var_dump($matchedName);
$re = "/^(\$|\(.+\))( ?)/im";
$str = "$ blah";
$subst = "";
$result = preg_replace($re, $subst, $str);
尝试 this.This 有效。
我在 PHP 脚本中遇到问题,如果此函数用于正则表达式匹配和替换。 我在 www.regex101.com 上测试了我的正则表达式并得到了预期的结果,但在 PHP.
中却没有我在函数中使用了这个模式:
$matchedName = preg_replace("/^($|\(.+\))( ?)/", "", $name);
匹配字符“$”或开头括号中的任何表达式并将其删除。任何带括号的输入都可以正常工作。
$name = "$ blah";
$matchedName = preg_replace("/^($|\(.+\))( ?)/", "", $name);
var_dump($matchedName);
Output:
string(8) "$ blah"
现在,我是不是误会了什么?或者这个函数在“$”字符的情况下真的是一个问题?
感谢任何回复
你需要转义\
,所以你的代码应该是:
$name = "$ blah";
$regex = "/^(\$|\(.+\))( ?)/";
$matchedName = preg_replace($regex, "", $name);
var_dump($regex);
var_dump($matchedName);
问题是你在双引号中 ("..."
),所以 PHP 解释器将第一个 \
解释为只是转义字符串中的 $
,而不是文字 \
。为了转义正则表达式中的字符,它需要是文字 \
。
因此,在处理器解释后,您的实际正则表达式如下所示:/^($|\(.+\))( ?)/
。您需要转义双引号内的 $
和 在正则表达式上下文中提供斜杠,因此您添加 \
.
请注意,您可以通过简单地使用单引号 ('...'
) 来避免这种情况,您只需要 $
而不是 \$
:
$name = "$ blah";
$regex = '/^($|\(.+\))( ?)/';
$matchedName = preg_replace($regex, "", $name);
var_dump($regex);
var_dump($matchedName);
$re = "/^(\$|\(.+\))( ?)/im";
$str = "$ blah";
$subst = "";
$result = preg_replace($re, $subst, $str);
尝试 this.This 有效。