PHP preg_match_all与可选参数

时间:2018-12-05 22:21:54

标签: php regex

这个正则表达式问题超出了我对复杂搜索模式的理解: 模式:

<!--TAG\((\d+),([^0-9\)]\w*)\)-->

搜索文字:

<!--TAG(204700,CS)-->
<!--TAG(204700,EN)-->
<!--TAG(204700,CS,def)-->
<!--TAG(204700,EN,rel)-->

该模式找到我的前两个链接,并将ID和语言缩写放入返回数组。现在,我需要调整模式,以便找到第三行和第四行,并将第三个可选参数放入返回数组。那超出了我。感谢您的帮助。

https://www.phpliveregex.com/p/qeu

1 个答案:

答案 0 :(得分:1)

您可以添加一个可选部分(?:,(\w+))?,以匹配逗号并捕获1个以上的字符:

<!--TAG\((\d+),([^0-9\)]\w*)(?:,(\w+))?\)-->

Regex demo

https://www.phpliveregex.com/p/qev

这部分[^0-9\)]\w*是一个否定的字符类,它不匹配数字或),例如也匹配%

根据您的要求,您可以将其更改为[A-Z]\w+