экранировать специальные символы в регулярном выражении с помощью php - PullRequest
0 голосов
/ 04 октября 2011

как я могу экранировать символы вроде этого: ' ( ) в регулярном выражении preg_match, потому что у меня проблема с запуском этого кода:

preg_match("'javascript:window.open('(.*?)')'si", $source, $export);

переменная $source имеет следующее значение:javascript:window.open('http://www.google.com')

и я хочу вынуть http://www.google.com из $source и поместить его в $export.

Ответы [ 3 ]

1 голос
/ 04 октября 2011

Вы можете просто извлечь свою строку $link, используя sscanf Документы :

$source = "javascript:window.open('http://www.google.com')";

sscanf($source, "javascript:window.open('%[^']", $link);

echo $link;

( Demo) Преимущество заключается в том, что синтаксис легче понять, чем с помощью регулярных выражений, и вы можете напрямую присваивать значения переменным.

Если вы хотите использовать регулярные выражения, вам нужно заключать в кавычки специальные символы (preg_quote Документы ) до создания шаблона.Это требует дополнительной работы, так как вы должны создать шаблон регулярного выражения перед его запуском:

# bare pattern, placeholder for matching group:
$pattern = "javascript:window.open('%s')"; 

# quote the pattern, you use ' as delimiter, it needs to be quoted
$pattern = preg_quote($pattern, "'");

# build full regex with delimiters, modifiers and inserting your match group
$pattern = sprintf("'$pattern'is", '(.*?)');

# run it
preg_match($pattern, $source, $export);

Демо

Это приведет к следующему шаблону:

'javascript\:window\.open\(\'(.*?)\'\)'is

Или как допустимая строка PHP:

$pattern = '\'javascript\\:window\\.open\\(\\\'(.*?)\\\'\\)\'is';

или ваш пример:

preg_match('\'javascript\\:window\\.open\\(\\\'(.*?)\\\'\\)\'is', $source, $export);
0 голосов
/ 04 октября 2011

Вы должны исключить любой специальный символ на \.Пожалуйста, попробуйте это:

$source = "javascript:window.open('http://www.google.com')";
preg_match("/javascript:window.open\\('(.*?)'\\)/si", $source, $export);
print_r($export);
0 голосов
/ 04 октября 2011

Вы всегда можете экранировать символы обратной косой чертой (\). В вашем случае:

preg_match("'javascript:window.open\(\'(.*?)\'\)'si", $source, $export);
...