【问题标题】:regex for double and single quotes in PHPPHP中双引号和单引号的正则表达式
【发布时间】:2013-10-20 10:30:08
【问题描述】:

我正在尝试制作一个匹配 PHP 中函数的参数的正则表达式。唯一的问题是正则表达式不起作用,或者我没有很好地转义它,因为我需要匹配双引号和单引号,这取决于开发人员在代码中使用的内容。

fn_name("string");
fn_name('string');

我已经做了两个表达式,每个案例一个,但我想这样可以做得更好。

/fn_name\("(.*?)\"\)/
/fn_name\('(.*?)\'\)/

如何制作一个正则表达式,并从中正确转义?

preg_match_all('/fn_name\("(.*?)\"\)/', file_get_contents($filename), $out);

谢谢。

【问题讨论】:

    标签: php regex quotes


    【解决方案1】:

    使用["'] 和反向引用 (\1):

    preg_match_all('/fn_name\((["\'])(.*?)\1\)/', "fn_name('string');", $out);
    preg_match_all('/fn_name\((["\'])(.*?)\1\)/', 'fn_name("string");', $out);
    

    见demo。

    【讨论】:

      【解决方案2】:

      试试这个:

      <?php
      $s = <<<END
      fn_name("string"); fn_name("same line");
      fn_name(   "str\"ing"   );
      fn_name("'str'ing'");
      
      fn_name   ('string');
      fn_name('str\'ing'   );
      fn_name(  '"st"ring"');
      
      fn_name("string'); # INVALID
      fn_name('string"); # INVALID
      END;
      
      preg_match_all('~fn_name\s*\(\s*([\'"])(.+?)\1\s*\)~', $s, $match, PREG_SET_ORDER);
      print_r($match);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-10
        • 1970-01-01
        • 2013-04-12
        • 2013-10-01
        相关资源
        最近更新 更多