我一直在寻找接近解决方案的解决方案,但未能成功找到解决方案。我希望通过php_codesniffer清理一些旧代码,但修复程序无法修复超过80列的注释或数组,只会让您知道它们。我有一个适用于注释的解决方案,但是我被卡在数组的正则表达式上。 我要修复的示例行是:
$line = "drupal_add_js(array('my_common' => array('my_code_validate' => variable_get('my_code_validate', FALSE), 'inner_index2 => 'inner_value2'), 'another_item' => 'another_value'), 'setting');";
$solution = preg_match('/array.*(\(.*?\))/', $line);
echo $solution;
我想要
$solution = "'my_common' => array('my_code_validate' => variable_get('my_code_validate', FALSE), 'inner_index2 => 'inner_value2'), 'another_item' => 'another_value'";
但是我得到1。请注意,其中还有另一个很常见的数组。我只想捕获第一个数组的值,然后就可以从那里将它们拆分成单独的行。最终,我想将我的解决方案分享给php codeniffer项目,以便为显示如何为squizlabs编写新的修复程序编写代码提供奖励。
答案 0 :(得分:1)
答案 1 :(得分:1)
您可以使用
if (preg_match('~array(\(((?:[^()]++|(?1))*)\))~', $s, $matches)) {
echo $matches[2];
}
请参见this demo。
详细信息
array
-文字子字符串(\(((?:[^()]++|(?1))*)\))
-第1组:
\(
((?:[^()]++|(?1))*)
-第2组(必需值):
(?:[^()]++|(?1))*
-除(
和)
以外的1个以上字符的零个或多个重复或整个第1组模式重复出现\)
-一个)
字符