preg_replace 匹配出现一次但不出现两次的字符串
preg_replace match single but not double occurances of a string
我想知道如何匹配这个例子:
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>
是否是集合的一部分。请帮助我扩展它,以便它满足我的需要。
基本上我想匹配触发器,当之前或之后有一个中断(但不是两次)时将其包含在匹配中,这样我就可以替换
**
试试这个。第一个捕获组将保存标签之间的数据。
(?:(?<!<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>
我想知道如何匹配这个例子:
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>
是否是集合的一部分。请帮助我扩展它,以便它满足我的需要。
基本上我想匹配触发器,当之前或之后有一个中断(但不是两次)时将其包含在匹配中,这样我就可以替换 **
试试这个。第一个捕获组将保存标签之间的数据。
(?:(?<!<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>