PHP中双引号和单引号的正则表达式

时间:2013-10-12 11:06:33

标签: php regex quotes

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

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

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

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

如何制作一个正则表达式,并从中正确地逃避它?

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

感谢。

2 个答案:

答案 0 :(得分:4)

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

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

请参阅demo

答案 1 :(得分:1)

试试这个:

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