我有一个带正则表达式的小代码片段,用于匹配数值,然后是矩形括号内的可选文本,以字符'A'结尾。一个例子是我的正则表达式应该匹配3次,但只匹配两次(PHP)
preg_match_all("/([0-9]+)(?:\[(.*)\])?A/", "123[SomeText]A345[SomeOtherText]A678A", $matches);
print_r($matches);
和预期的结果是有三场比赛:
Array
(
[0] => Array
(
[0] => 123[SomeText]A
[1] => 345[SomeOtherText]A
[2] => 678A
)
[1] => Array
(
[0] => 123
[1] => 345
[2] => 678
)
[2] => Array
(
[0] => SomeText
[1] => SomeOtherText
[2] =>
)
)
,而上面的代码只匹配了两次:
Array
(
[0] => Array
(
[0] => 123[SomeText]A345[SomeOtherText]A
[1] => 678A
)
[1] => Array
(
[0] => 123
[1] => 678
)
[2] => Array
(
[0] => SomeText]A345[SomeOtherText
[1] =>
)
)
我看不到我在做什么错在给定的正则表达式中。任何修复正则表达式的建议都是值得欢迎的。
我认为这可能与“贪婪”,但我不知道如何/在哪里考虑。非常感谢您的回答。 – Alex
不仅是一个正确的答案,而且需要额外的正则表达式理解水平,才能真正实现快速,准确的解决方案。 +1 – ridgerunner