【发布时间】:2013-07-05 17:27:49
【问题描述】:
我需要在 ruby 中使用正则表达式捕获标记 (html)(是的,我知道这很糟糕,但我还没有找到任何替代方法,因为原始标记的格式确实很糟糕)。 所以我有一个看起来像这样的原始文件:
<h3 class="grey" style="font-size:18pt;"><!-- #BeginEditable "Title" -->Sample Title
<!-- #EndEditable --></h3>
<!-- #BeginEditable "Text" --><p>Foo bar </p>
<p>
</p><ul>
<li>Sample li</li>
<p></p>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<p>Foo bar<span class="blue">Lorem ipsum dolor</span></p></blockquote>
<!-- #EndEditable -->
由于我无法更改原始标记(并且根本没有有意义的类!),我决定尝试一些正则表达式魔法。
我尝试使用如下正则表达式捕获 cmets 中的内容:
<!-- #BeginEditable "(Title|Text|Foo)" -->\s*([^!]+)\s*<!-- #EndEditable -->
显然,当标记中有! 时,这会失败,但是当有html 标记(捕获纯文本)时,使用.* 捕获内部内容总是会失败。我在这里想念什么吗? (即带有负前瞻的版本?)
【问题讨论】:
-
使用
nokogiri。完美的宝石。 -
我怀疑 nokogiri 会有所帮助,因为我没有任何容器可以匹配,只有 cmets 在标记中标记容器。杰里的回答虽然成功了!