Вы можете просто извлечь свою строку $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);