可选的捕获组部分

时间:2018-10-04 16:35:57

标签: php regex

我有这种正则表达式模式:

[^-]+-(.+)[^\d](.+)-(.*?)-.*(\d+).*-([\w]+-[\w]+-[^-]+)-(\d+-\d+)-(.+)\.

这需要同时满足这两种情况

Data Location 1 - many many words 201808206566 - many words - 010114-INL-USD-B087834-2018-08-Bill.PDF

Data Location 1 - many many words 201808206565 - many words - 010115-INL-B087845-2018-08-Bill.PDF

按原样,这匹配第一种情况,而不匹配第二种情况。通过从第5个捕获组中删除[\w]+-的一个实例,我得到了相反的结果,这是因为第一种情况包含INL-USD-B087834,其中包含一个附加数据块。如何使第二实例可选?

1 个答案:

答案 0 :(得分:0)

使用?运算符将其放在可选组中。

[^-]+-(.+)[^\d](.+)-(.*?)-.*(\d+).*-(\w+-(?:\w+-)?[^-]+)-(\d+-\d+)-(.+)\.

或者您使用数字量词在其中允许1或2个字块:

[^-]+-(.+)[^\d](.+)-(.*?)-.*(\d+).*-((?:\w+-){1,2}[^-]+)-(\d+-\d+)-(.+)\.