2010-09-21 3 views
1

Как обратиться к специальным символам в Regex? @ ? # $ % %...
Этот паттен ищет письмо, которое находится между префиксом и суффиксом.PHP: regex & hash key в строке

$pattern = '/((?<!\b$PREFIX)$LETTER|$LETTER(?!$SUFFIX\b))/i'; 

$string = 'end'; 

$prefix = 'e'; 
$letter = 'n'; 
$suffix = 'd'; 

Но что, если $string началась с #

$string = '#end'; 
$prefix = ??? 

редактирования: Это preg_replace в полном

$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

Ах, '\ b' не работает, это проблема. – Wrikken

ответ

1

Вы должны приложить свой шаблон двойной кавычкой, чтобы переменные были интерполированы.

$pattern = "/((?<!\b$PREFIX)$LETTER|$LETTER(?!$SUFFIX\b))/i"; 

И еще, вы определяете $ префикс (нижний регистр) и используете $ 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 п, Ei п stei n ga n d Ediso n. #end

+0

большое спасибо! – Zebra

1

Прежде всего, вам нужно избегать специальных символов с обратной косой чертой. Но поскольку обратная косая черта уже выполняет буквы в строке, вам сначала придется сбежать от вашей обратной косой черты.

$string = '\\#end'; 

Лучший способ сделать это состоит в использовании функции preg_quote() на вашей строке, а также указать, какой разделитель используется (здесь «/»).

preg_quote($string, '/');