这个 RegEx 有什么问题?

Whats wrong with this RegEx?

我写了这个正则表达式:'/\[\.{2}([^\.].+)\]/'

它应该匹配这样的模式:[..Class,Method,Parameter]

它一直有效,直到我有这样的模式:[..Class1,Method1,Para1][..Class2,Method2,Para2]

我试图通过在 + 后面放置一个 ? 来让 RegEx 变得懒惰。 '/\[\.{2}([^\.].+?)\]/' 但它没有帮助。有什么建议吗?

我相信您想使用 [^\.]+ 而不是 [\.].+。请注意 .+ 是一个贪婪量化的点模式,匹配 any 1 个或多个除换行字符以外的字符,因此匹配 ][.

] 以外的任何 1 个或多个字符与 [^]] 匹配,而不是使用 [^\.]:

\[\.{2}([^]]+)]

this regex demo

详情

  • \[ - 一个 [ 字符
  • \.{2} - 两个点字符
  • ([^]]+) - 第 1 组:除 ] 之外的一个或多个字符(当它是字符 class 中的第一个字符时无需转义 ]
  • ] - 右括号(当 ] 在字符 class 之外时无需转义)。

PHP demo:

$str = '[..Class,Method,Parameter]  [..Class1,Method1,Para1][..Class2,Method2,Para2]';
preg_match_all('/\[\.{2}([^\.].+?)\]/', $str, $matches);
print_r($matches[0]);

结果:

Array
(
    [0] => [..Class,Method,Parameter]
    [1] => [..Class1,Method1,Para1]
    [2] => [..Class2,Method2,Para2]
)