Php 类似于WordPress短代码的正则表达式
我读过其他有类似问题的线程。但是没有特定于这种情况-如果我在主短代码中包含了相同类型的短代码怎么办 这是演示的短代码- 输入 测试正则表达式Php 类似于WordPress短代码的正则表达式,php,regex,shortcode,Php,Regex,Shortcode,我读过其他有类似问题的线程。但是没有特定于这种情况-如果我在主短代码中包含了相同类型的短代码怎么办 这是演示的短代码- 输入 测试正则表达式 \[cigar].*?\[\/cigar\] 正确的输出为- [cigar] [cigar] [cigar] ceva [/cigar] [/cigar] [/cigar] 不是 有什么解决方案吗?只需添加一个消极的前瞻性断言,如下所示 \[cigar].*?\[\/cigar\](?!\s*\[\/) (?!\s*\[\/)反向前瞻断言,匹配后会
\[cigar].*?\[\/cigar\]
正确的输出为-
[cigar] [cigar] [cigar] ceva [/cigar] [/cigar] [/cigar]
不是
有什么解决方案吗?只需添加一个消极的前瞻性断言,如下所示
\[cigar].*?\[\/cigar\](?!\s*\[\/)
(?!\s*\[\/)
反向前瞻断言,匹配后会出现任何空格,但不会出现一个或多个空格,后面还会出现[/
符号。取决于您正在做什么,这并不重要
假设我正在编写BBCode解析器,我要处理这个问题:[b][b][b]出于某种原因,三倍加粗![/b][/b][/b]
所以我有一个正则表达式,比如说/\[b\](.*?\[\/b\]/
=>“$1”
如果我重复应用替换,直到它不再改变任何东西,结果是:出于某种原因,三倍加粗!
就浏览器而言,我有三个完全有效的嵌套元素,即使在解析它们时,我并不是从外到内进行分析
另一种选择是从最后一个匹配到第一个。这将通过
/\[b\](.*?\[\/b\](?!.\[b\])/
这将匹配最后一个
[b]
,以及它后面的第一个[/b]
,换句话说,最里面的嵌套对。同样,重复应用程序直到没有任何更改都将导致所有对被解析,但这一次它们实际上将以“正确”的顺序被解析。(请注意,上面的正则表达式在大量输入时可能速度慢或效率低-请小心使用)在此处发布输入和正则表达式。它位于该链接上,但ok,ok PostedTanks@Raj此字符串有任何解决方案吗?[雪茄][雪茄][雪茄][雪茄]ceva[/雪茄][雪茄][雪茄][雪茄]alceva[/雪茄][雪茄][雪茄]?结果是1个匹配,应该是2个匹配
[cigar] [cigar] [cigar] ceva [/cigar]
\[cigar].*?\[\/cigar\](?!\s*\[\/)