这个 RegEx 有什么问题?
Whats wrong with this RegEx?
我写了这个正则表达式:'/\[\.{2}([^\.].+)\]/'
它应该匹配这样的模式:[..Class,Method,Parameter]
它一直有效,直到我有这样的模式:[..Class1,Method1,Para1][..Class2,Method2,Para2]
我试图通过在 +
后面放置一个 ?
来让 RegEx 变得懒惰。 '/\[\.{2}([^\.].+?)\]/'
但它没有帮助。有什么建议吗?
我相信您想使用 [^\.]+
而不是 [\.].+
。请注意 .+
是一个贪婪量化的点模式,匹配 any 1 个或多个除换行字符以外的字符,因此匹配 ]
和 [
.
将 ]
以外的任何 1 个或多个字符与 [^]]
匹配,而不是使用 [^\.]
:
\[\.{2}([^]]+)]
详情
\[
- 一个 [
字符
\.{2}
- 两个点字符
([^]]+)
- 第 1 组:除 ]
之外的一个或多个字符(当它是字符 class 中的第一个字符时无需转义 ]
)
]
- 右括号(当 ]
在字符 class 之外时无需转义)。
$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]
)
我写了这个正则表达式:'/\[\.{2}([^\.].+)\]/'
它应该匹配这样的模式:[..Class,Method,Parameter]
它一直有效,直到我有这样的模式:[..Class1,Method1,Para1][..Class2,Method2,Para2]
我试图通过在 +
后面放置一个 ?
来让 RegEx 变得懒惰。 '/\[\.{2}([^\.].+?)\]/'
但它没有帮助。有什么建议吗?
我相信您想使用 [^\.]+
而不是 [\.].+
。请注意 .+
是一个贪婪量化的点模式,匹配 any 1 个或多个除换行字符以外的字符,因此匹配 ]
和 [
.
将 ]
以外的任何 1 个或多个字符与 [^]]
匹配,而不是使用 [^\.]
:
\[\.{2}([^]]+)]
详情
\[
- 一个[
字符\.{2}
- 两个点字符([^]]+)
- 第 1 组:除]
之外的一个或多个字符(当它是字符 class 中的第一个字符时无需转义]
)]
- 右括号(当]
在字符 class 之外时无需转义)。
$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]
)