正则表达式,用于包含包含子字符串的子字符串的字符串

时间:2018-11-20 07:20:05

标签: php regex

假设我有这个字符串:

[section][module_text id="123"]text[/module][module_number id=""]000[/module][/section]

我可以找到每个完整的[module...[/module...]子字符串,

(\[module)(.*?)(\[\/module.*?\])

但是我只想匹配[module]参数中包含数字的id=""字符串。在这种情况下,第一个[module]

我一直在尝试很多东西,但是我似乎无法接近。

1 个答案:

答案 0 :(得分:3)

匹配module后,您可以匹配非]个字符,直到到达id部分为止,并且在id的{​​{1}}之后,您可以匹配"以确保[^"]*\d中包含数字:

id

https://regex101.com/r/25JcEP/1

如果您要匹配的(\[module[^]]*id="[^"]*\d)(.*?)(\[\/module[^]]*\]) 的{​​{1}}总是以 数字开头,那么您可以将其简化为

module

请注意,在最后的id中使用否定字符类而不是(\[module[^]]*id="\d)(.*?)(\[\/module[^]]*\]) -可能的情况下,否定字符类是a bit more efficient而不是惰性重复。