我想知道如何匹配这个例子:
https://regex101.com/r/wmvSDY/1
我需要能够在触发之前或之后替换<br>
的单个(也是非强制性的)出现,但不能替换两次。
<br>[trigger]...[/trigger]<br><br>
<br>
的出现可能是完全随机的。
<br><br>[trigger]...
[/trigger]<br><br>
有效匹配项:
1. **[trigger]...[/trigger]<br>**
2. **<br>[trigger]...[/trigger]**
3. **<br>[trigger]...[/trigger]<br>**
我当前的preg_replace看起来像这样:
"/(?:<br>)?\[trigger\](.*?)\[\/trigger\](?:<br>)?/is"
它仅与触发之前或之后的单个<br>
相匹配,并且不关心<br>
是否是集合的一部分。请帮助我扩展此范围,以便它满足我的需求。
基本上我想匹配触发器,并且在之前或之后有一个中断(但不是两次)时将其包括在匹配中,以便我可以替换 **
答案 0 :(得分:1)
尝试一下。第一个捕获组将在标签之间保存数据。
(?:(?<!<br>)<br>)?\[trigger\]([\s\S]*?)\[\/trigger\](?:<br>(?!<br>))?
解释
(?:(?<!<br>)<br>)? # optional <br> without a previous <br>
\[trigger\] # trigger tag
([\s\S]*?) # any character 0 or more, lazy
\[\/trigger\] # end trigger
(?:<br>(?!<br>))? # optional <br> without an extra <br>