Html 使用RegExp在中匹配嵌套的[quote]

Html 使用RegExp在中匹配嵌套的[quote],html,regex,bbcode,Html,Regex,Bbcode,我正在尝试让regexp匹配一些嵌套标记。(是的,我知道我应该使用解析器,但我的输入是正确的) 例如: Text. More text. [quote] First quote [quote] Nested second quote. [/quote] [/quote] 假设我希望regexp将标记简单地更改为: Text. More text. <blockquote> First quote <blockquote> Nested second quote. <

我正在尝试让regexp匹配一些嵌套标记。(是的,我知道我应该使用解析器,但我的输入是正确的)

例如:

Text.
More text.
[quote]
First quote
[quote]
Nested second quote.
[/quote]
[/quote]
假设我希望regexp将标记简单地更改为

Text.
More text.
<blockquote>
First quote
<blockquote>
Nested second quote.
</blockquote>
</blockquote>
文本。
更多文本。
第一句话
嵌套的第二个引号。

如何做到这一点,同时匹配开始标记和结束标记?

如果您不介意正确性,那么您可以使用简单的字符串替换并分别替换每个标记。下面是一些用于替换开头和结尾标记的示例:

$str = str_replace('[quote]', '<blockquote>', $str);
$str = str_replace('[/quote]', '</blockquote>', $str);
$str=str_替换(“[quote]”,“$str”);
$str=str_replace(“[/quote]”,“$str”);
或者借助正则表达式(再次使用PHP):

$str=preg\u replace(“~\[(/?)quote]”,“$str”);
此处,
\[(/?)引号]
的匹配项替换为
,其中,
$1
替换为第一组模式的匹配项(
(/?)
,或者
/
或者为空)

但您确实应该使用一个跟踪开始和结束标记的解析器。否则,您可能会有一个没有对应项的开始或结束标记,或者(如果您正在使用其他标记)没有正确嵌套的开始或结束标记。


但是你可以用
替换
[quote]
的每个实例,用
替换
的每个实例,这是一个糟糕的想法,但是你显然在尝试匹配如下内容:
\[\(/?\)quote\]
并将其替换为:
你可以使用两个表达式

s/\[quote\]/\<blockquote\>/
s/\[\/quote\]/\<\/blockquote\>/
s/\[quote\]/\/
s/\[\/quote\]/\/

警告:你可以将嵌套内容匹配到预定的深度:“你不能(任意地)将嵌套内容与正则表达式匹配。”这就是我想要的答案:)所以我使用了BBCode解析器:@KennyTM:啊,谢谢你的评论。我不知道我怎么会认为他想使用PHP。
s/\[quote\]/\<blockquote\>/
s/\[\/quote\]/\<\/blockquote\>/