这个RegEx怎么了?

时间:2018-02-13 23:26:03

标签: php regex lazy-evaluation

我写了这个RegEx:p1, c1, c2 p2, null, null

它应该匹配这样的模式:'/\[\.{2}([^\.].+)\]/'

直到我有这样的模式:[..Class,Method,Parameter]

我试图通过[..Class1,Method1,Para1][..Class2,Method2,Para2] ?来使RegEx变得懒惰。 +但它没有帮助。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

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

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

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

请参阅this regex demo

<强>详情

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

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]
)