使用php转义正则表达式中的特殊字符

时间:2011-10-04 11:41:21

标签: php regex char preg-match

如何在preg_match正则表达式中转义这样的字符:' ( ),因为我在运行此代码时遇到问题:

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

$source变量具有以下值:javascript:window.open('http://www.google.com')

我希望从$source中取出http://www.google.com并将其放入$export

4 个答案:

答案 0 :(得分:1)

您只需使用sscanfDocs提取$link字符串:

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

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

echo $link;

Demo)好处是语法比正则表达式更容易理解,你可以直接为变量赋值。

如果您想使用正则表达式,则需要在创建模式之前引用特殊字符(preg_quoteDocs)。这需要更多的工作,因为您必须在运行它之前构建正则表达式模式:

# 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);

Demo

这将产生以下模式:

'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)

使用此字符在要使用的字符之前进行换码 “ \”

如果您的字符串中包含字符(。,:,(,),\,/,-,[,],#,...),并且您希望它们与字符串匹配,则需要将它们包含在图案按“ \”风景

 (\.,\:,\(,\),\\\\,\/,\-,\[,\],\#,...)