【发布时间】:2013-08-12 08:51:44
【问题描述】:
我目前在尝试解析为 reReplaceNoCase 的字符串中有以下 HTML:
<blockquote class="id-1241">
<p>Stuff</p>
</blockquote>
<p>Test</p>
<blockquote class="id-2441">
<p>More stuff</p>
<blockquote>
<p>Test</p>
</blockquote>
</blockquote>
我想最终将其转换为:
{{1241}}
<p>Test</p>
{{2441}}
所以我想从 blockquote 类中取出 id,并用它来替换 blockquote。我目前正在使用reReplaceNoCase 来执行此操作,但我注意到它在最后一个结束块引用标记的末尾结束正则表达式,而不是“连接”到正确的块引用开始标记的那个,导致以下结果:
{{1241}}
这是我目前使用的:
reply = reReplaceNoCase(reply, '<blockquote class="id-([0-9]+)">(.*)</blockquote>', '{{\1}}', 'ALL');
有没有人有一个更好的例子,结果是我想要的?我想我可以使用带有 reFind 的循环,或者类似的东西,但这似乎太麻烦了,我认为有更简单的方法可以做到这一点,而且性能也更好。
如果可能,我也想避免直接使用 Java。
【问题讨论】:
-
嵌套块引号可以包含任何类属性吗?
-
不,嵌套的不会有任何类属性。 (至少,块引用 - 块引用内的其他标签可以)
-
恐怕这无法做到,因为您无法使用正则表达式解析嵌套结构,如果您发现有人可以仅使用正则表达式解决此问题,请告诉我。跨度>
-
你可以用正则表达式解析嵌套结构——你不能用一个single正则表达式进行任意嵌套。无论如何,不是一个理智的人。无论如何,此任务的正确工具是 HTML 解析器,这将使其非常简单。看看jSoup。
-
jSoup 是服务器端的,比 CF 内置的 XML 解析好十亿倍。
标签: regex coldfusion