1

我需要在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 -->

由于我无法更改原始标记(并且根本没有有意义的类!),我决定尝试一些正则表达式魔法。

我尝试使用正则表达式捕获评论中的内容,如下所示:

<!-- #BeginEditable "(Title|Text|Foo)" -->\s*([^!]+)\s*<!-- #EndEditable -->

显然,当!标记内部存在时,这会失败,但是.*当存在 html 标记(纯文本被捕获)时,用于捕获内部内容总是会失败。我在这里想念什么吗?(即带有负前瞻的版本?)

4

1 回答 1

0

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

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

这是关于rubular的演示。

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

于 2013-07-08T11:44:11.230 回答