2010-09-21 109 views
1

如何解决正则表达式中的特殊字符? @ ? # $ % %...
此模式搜索前缀和后缀之间的字母。PHP:字符串中的正则表达式和哈希键

$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); 

preg_replace函数这个替换所有n字母一个大胆的n但应该剔除n#end

+0

啊,'\ b'不起作用更成问题。 – Wrikken 2010-09-21 16:53:37

回答

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> 

无代码格式:

ň ewto ñ,EI ñ STEI n ga n d Ediso n。 #end

+0

非常感谢! – Zebra 2010-09-23 15:35:52

1

你必须首先用反斜杠转义特殊字符。 但是由于反斜线已经在字符串中转义字母,所以您必须首先转义您的反斜杠。

$string = '\\#end'; 

一个更好的办法来做到这一点是使用你的字符串preg_quote()功能,并指定你用什么样的分隔符(这里“/”)。

preg_quote($string, '/');