在急切的量词之前进行负面回顾

Negative lookbehind before an eager quantifier

我需要重构一些 PHP 注释,我想用 array<int, string> 替换 string[]

我已尝试将适当的注释与此 PCRE 正则表达式相匹配:

(?<!$|>)\w+\[\]

但是不行,here's how the regex is matching:

最新的两行不应该匹配。有没有办法为此创建一个有效的正则表达式,或者我应该使用创建自定义脚本来执行此操作?

您可以使用

\b(?<!$|->)\w+\[]

参见PCRE regex demo

详情

  • \b - 单词边界
  • (?<!$|->) - 如果 $-> 紧邻当前位置
  • 的左侧,则匹配失败的负后视
  • \w+ - 1+ 个单词字符。
  • \[] - [] 子串。

参见PHP demo

$str = '/** @var string[] */
/** @return string[] */
* @param Company[]|null $companies

$icons[] = static::getIconDetailsFromLink($link);
$this->properties[] = $property;';

if (preg_match_all('/\b(?<!$|->)\w+\[]/', $str, $matches)) {
  print_r($matches);
}