如何处理正则表达式中的特殊字符? @ ? # $ % %...
此模式搜索前缀和后缀之间的字母。
$pattern = '/((?<!\b$PREFIX)$LETTER|$LETTER(?!$SUFFIX\b))/i';
$string = 'end';
$prefix = 'e';
$letter = 'n';
$suffix = 'd';
但如果$string
以#
$string = '#end';
$prefix = ???
编辑:这是完整的 这会使用粗体$text = "<p>Newton, Einsteing and Edison. #end</p>"
$pattern = '/((?<!\b$PREFIX)$LETTER|$LETTER(?!$SUFFIX\b))/i';
echo preg_replace($pattern, '<b>\1</b>', $text);
n
替换所有n
个字母,但应该在n
#end
答案 0 :(得分:1)
你必须首先用反斜杠转义特殊字符。 但是由于反斜杠已经转义为字符串中的字母,因此您必须首先逃避反斜杠。
$string = '\\#end';
更好的方法是在字符串上使用preg_quote()
函数,并指定您使用的分隔符类型(此处为“/”)。
preg_quote($string, '/');
答案 1 :(得分:1)
你必须用双引号括起你的模式以插入变量。
$pattern = "/((?<!\b$PREFIX)$LETTER|$LETTER(?!$SUFFIX\b))/i";
此外,您定义$ prefix(小写)并使用$ PREFIX(大写)。所以脚本变成了以下内容,对我来说很好用:
<?php
$PREFIX = 'e';
$LETTER = 'n';
$SUFFIX = 'd';
$text = "<p>Newton, Einsteing and Edison. #end</p>";
$pattern = "/((?<!\b$PREFIX)$LETTER|$LETTER(?!$SUFFIX\b))/i";
echo preg_replace($pattern, "<b>$1</b>", $text),"\n";
?>
输出:
<p><b>N</b>ewto<b>n</b>, Ei<b>n</b>stei<b>n</b>g a<b>n</b>d Ediso<b>n</b>. #end</p>
没有代码格式化:
N ewto n ,Ei n stei n ga n d Ediso 名词的。 #END