2

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

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

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

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

我如何制作一个正则表达式,并从中正确逃脱?

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

谢谢。

4

2 回答 2

5

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

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

演示

于 2013-10-12T11:09:54.700 回答
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);
于 2013-10-12T11:29:29.337 回答