PHP:正则表达式&字符串中的哈希键

时间:2010-09-21 16:11:44

标签: php regex preg-replace special-characters

如何处理正则表达式中的特殊字符? @ ? # $ % %...
此模式搜索前缀和后缀之间的字母。

$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

2 个答案:

答案 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