【问题标题】:escape special characters in regex using php使用php转义正则表达式中的特殊字符
【发布时间】:2011-10-04 11:41:20
【问题描述】:

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

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

$source 变量有这个值:javascript:window.open('http://www.google.com')

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

【问题讨论】:

标签: php regex char preg-match


【解决方案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);

【讨论】:

    【解决方案2】:

    您始终可以使用反斜杠 (\) 转义字符。在你的情况下:

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

    【讨论】:

      【解决方案3】:

      您必须用\ 替换任何特殊字符。请试试这个:

      $source = "javascript:window.open('http://www.google.com')";
      preg_match("/javascript:window.open\\('(.*?)'\\)/si", $source, $export);
      print_r($export);
      

      【讨论】:

        【解决方案4】:

        使用此字符在您要使用的字符之前转义 “\”

        如果您的字符串中有字符 (.,:,(,),\,/,-,[,],#,...) 并且您希望它们与您需要在用“\”换行

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

        【讨论】:

          猜你喜欢
          • 2013-02-25
          • 2013-12-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多