我正在尝试制作一个与PHP中函数的参数匹配的正则表达式。唯一的问题是正则表达式不起作用,或者我没有很好地避开它,因为我需要匹配双引号和单引号,这取决于开发人员在代码中使用的内容。
fn_name("string");
fn_name('string');
我已经制作了两个表达式,每个表达一个,但我想这可以做得更好。
/fn_name\("(.*?)\"\)/
/fn_name\('(.*?)\'\)/
如何制作一个正则表达式,并从中正确地逃避它?
preg_match_all('/fn_name\("(.*?)\"\)/', file_get_contents($filename), $out);
感谢。
答案 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);