1

我四处寻找接近此的解决方案,但未能成功找到解决方案。我希望通过 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 codesniffer 项目的解决方案,以便展示如何为 squizlabs 编写新的修复程序。

4

2 回答 2

1

试试这个解决方案:

.*?array\(('.*?)\), [^\)]+'\);.*

用。。。来代替:

$1

演示:https ://regex101.com/r/oV4nvT/4/

于 2019-02-17T01:59:26.860 回答
1

您可以使用

if (preg_match('~array(\(((?:[^()]++|(?1))*)\))~', $s, $matches)) {
  echo $matches[2];
}

请参阅此演示

细节

  • array- 文字子串
  • (\(((?:[^()]++|(?1))*)\))- 第一组:
    • \(
    • ((?:[^()]++|(?1))*)- 第 2 组(所需值):
      • (?:[^()]++|(?1))*- 零次或多次重复 1+ 字符而不是()/或整个第 1 组模式递归
    • \)- 一个)字符
于 2019-02-18T07:34:38.353 回答