Php 使用嵌套模式的REGEX辅助?
我需要解析以下字符串:Php 使用嵌套模式的REGEX辅助?,php,javascript,regex,preg-replace,Php,Javascript,Regex,Preg Replace,我需要解析以下字符串: [QUOTE=Mark] [QUOTE=Jack] How are you doing Mark? [/QUOTE] Good to hear from you Jack, Im doing fine! [/QUOTE] 我基本上是通过使用以下正则表达式将[quote]区域转换为样式化的div来将这组BBCode转换为HTML text = text.replace(/\[QUOTE=(.*?)]([\s\S]*?)\[\/QUOTE\]/gi, '&
[QUOTE=Mark]
[QUOTE=Jack]
How are you doing Mark?
[/QUOTE]
Good to hear from you Jack, Im doing fine!
[/QUOTE]
我基本上是通过使用以下正则表达式将[quote]区域转换为样式化的div来将这组BBCode转换为HTML
text = text.replace(/\[QUOTE=(.*?)]([\s\S]*?)\[\/QUOTE\]/gi, '<div class="quotes"><i>Quote by $1</i><br />$2</div>');
text=text.replace(/\[QUOTE=(.*?)([\s\s]*?)\[\/QUOTE\]/gi,'QUOTE by$1
$2');
这段代码将正确地解析出第一组引号,而不是嵌套的级别引号。有什么方法可以改进表达式吗?当你进入嵌套级别时,你就失去了输入的“常规”性质。它变得更“像”
我建议您对字符串进行标记,并使用类似于a的方法对其进行解析。如果这就是您所要做的,那么解决方案会简单得多:
text = text.replace(/\[QUOTE=(.*?)\]/gi,
'<div class="quotes"><i>Quote by $1</i><br />');
text = text.replace(/\[\/QUOTE\]/gi, '</div>');
text=text.replace(/\[QUOTE=(.*?)\]/gi,
“报价1美元
”);
text=text.replace(/\[\/QUOTE\]/gi,”);
您的代码也可以工作,但您必须多次应用它——在本例中是两次,但如果有三重嵌套引号,则必须进行三次传递,以此类推。我可以问一下为什么要使用javascript吗?您可能需要一种递归方法来实现这一点。将您的引号作为对象加载(Quote$AUTHER$text$subquotes…)怎么样?然后你可以输出任何你想要的格式。
PCRE-PHP中的Atomic Grouping
不也能解决这个问题吗?只是好奇:)@yoda:不是原子分组,但使用正则表达式解析PHP中的嵌套BB很简单。问题是,他使用的是JS(据我记忆所及,它的正则表达式功能要弱得多)。