【发布时间】:2014-02-25 23:49:05
【问题描述】:
我正在尝试创建一个正则表达式来从我们的文档站点中提取两个锚标记之间的内容。
我们以JDK wiki page 为例。我想提取“JDK 内容”和“JDK 和 SDK 之间的歧义”之间的内容。我目前的正则表达式是:
<span[^>]*\bid\s*=\s*(?:"|')?JDK_contents(?:'|")?[^>]*>([^<]*)</span>(.*?)
(<span[^>]*\bid\s*=\s*(?:"|')?Ambiguity_between_a_JDK_and_an_SDK(?:'|")?[^>]*>[^<]*</span>.*)
但由于这种正则表达式会执行多次,我想对其进行优化。
我可以考虑的一件事是.*?: </span>(.*?)(<span[^>]...)
因为它会匹配任何东西,并导致很多回溯。
顺便说一句,我也尝试过贪婪版本:</span>(.*)(<span[^>]...),但它要慢得多,因为.* 会匹配所有文本,然后回溯到Ambiguity_between_a_JDK_and_an_SDK 范围。
我正在使用 Java。谁能帮忙提供一些见解?
【问题讨论】:
-
如果 regex 是这里的最佳解决方案,则不使用。请看这个:stackoverflow.com/questions/1732348/…
-
你在这个正则表达式中使用了哪些方法?