我需要一个能捕获以下内容的正则表达式:
foo-bar-fort-worth-tx
1st group: (foo-bar) 2nd group: (fort-worth) 3rd group: (tx)
我遇到麻烦了,因为定界符“-”也可能出现在捕获组中。幸运的是,我认为每个捕获组中最多只能有一个“-”。
这是我的正则表达式:
^(.+)-(.+)-[a-zA-Z]{2}$
但是,它没有按预期运行。任何帮助将不胜感激。
答案 0 :(得分:1)
图案中有一些错误。当使用(.+)
之类的捕获组时,由于.
的贪婪,正则表达式将尝试并匹配(捕获)任何内容(+
)。有关模式,请参见debugger too,然后检查here。由于它匹配任何内容,因此将匹配到字符串末尾。然后,该模式要求输入-
,因此正则表达式必须回溯直到找到-
,然后停止。因此,您最终得到:
Group 1. 0-18 `foo-bar-fort-worth`
使用以下使用否定字符集的表达式来匹配并捕获您描述的模式:
^([^-]+-[^-]+)-([^-]+-[^-]+)-(.*)$
您可以{{3}}试试。
Group 1. 0-7 `foo-bar`
Group 2. 8-18 `fort-worth`
Group 3. 19-21 `tx`