我在用regex在php中挣扎,以从字符串中提取函数参数.我正在解析php中的javascript文件,并想从一行中提取2个函数参数.以下是线条外观的示例:
"Backbone.Radio( 'comments ').trigger("added:comment " ,function(){});"
我想从这一行中提取注释一词并添加:comment,但不带任何空格或引号.
我尝试过:
$arrMatches = array();
$strRegEx = "/\\(\\s*['\"]\\s*([^)]+?)\\s*['\"]\\s*/";
$nMatches = preg_match_all($strRegEx, $strLine, $arrMatches);
但这会给我类似:(”comments’和(“” added:comment“
我将对如何解决此问题有所帮助.
解决方法:
您可以使用:
$regex = '~\(\h*([\'"])(.+?)\h*(?!\\\\)(?=\1)~';
$string = "Backbone.Radio( 'comments ').trigger(\"added:comment \" ,function(){});";
preg_match_all($regex, $string, $matches);
print_r($matches[2]);
/*
Array
(
[0] => comments
[1] => added:comment
)
*/
?>
正则表达式查找单引号/双引号,捕获它们并查找下一个未转义的单引号/双引号.参见a demo on regex101.com.
警告:虽然在这个特定示例中可能会起作用,但是通常这是使用正则表达式的最后一种方法-您是否考虑过使用解析器?
标签:php,regex
来源: https://codeday.me/bug/20191118/2026408.html