如何在preg_match正则表达式中转义这样的字符:'
(
)
,因为我在运行此代码时遇到问题:
preg_match("'javascript:window.open('(.*?)')'si", $source, $export);
$source
变量具有以下值:javascript:window.open('http://www.google.com')
我希望从$source
中取出http://www.google.com并将其放入$export
。
答案 0 :(得分:1)
您只需使用sscanf
Docs提取$link
字符串:
$source = "javascript:window.open('http://www.google.com')";
sscanf($source, "javascript:window.open('%[^']", $link);
echo $link;
(Demo)好处是语法比正则表达式更容易理解,你可以直接为变量赋值。
如果您想使用正则表达式,则需要在创建模式之前引用特殊字符(preg_quote
Docs)。这需要更多的工作,因为您必须在运行它之前构建正则表达式模式:
# 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);
答案 1 :(得分:0)
您始终可以使用反斜杠(\
)转义字符。在你的情况下:
preg_match("'javascript:window.open\(\'(.*?)\'\)'si", $source, $export);
答案 2 :(得分:0)
您必须通过\
转义任何特殊字符。请试试这个:
$source = "javascript:window.open('http://www.google.com')";
preg_match("/javascript:window.open\\('(.*?)'\\)/si", $source, $export);
print_r($export);
答案 3 :(得分:0)
使用此字符在要使用的字符之前进行换码 “ \”
如果您的字符串中包含字符(。,:,(,),\,/,-,[,],#,...),并且您希望它们与字符串匹配,则需要将它们包含在图案按“ \”风景
(\.,\:,\(,\),\\\\,\/,\-,\[,\],\#,...)