【问题标题】:capture content in html comments with regex使用正则表达式捕获 html 注释中的内容
【发布时间】: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 在标记中标记容器。杰里的回答虽然成功了!

标签: html ruby regex comments


【解决方案1】:

我猜你可以利用积极的前瞻

<!-- #BeginEditable "(Title|Text|Foo)" -->(.*?)(?=<!-- #EndEditable -->)

这是rubular 上的演示。

注意我使用了 m 修饰符来使点匹配换行符。因此,点将匹配每个字符,直到找到前面的&lt;!-- #EndEditable --&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-02
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    • 2010-10-01
    • 1970-01-01
    相关资源
    最近更新 更多