2010-09-21 107 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, '/');