我需要在 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标记(捕获纯文本)时,使用.*
捕获内部内容总是失败。我在这里错过了什么吗? (即具有负向前瞻的版本?)
答案 0 :(得分:0)
我猜你可以使用肯定的前瞻:
<!-- #BeginEditable "(Title|Text|Foo)" -->(.*?)(?=<!-- #EndEditable -->)
以下是rubular的演示。
注意我使用m修饰符使点匹配换行符。因此,点将匹配每个字符,直到它找到<!-- #EndEditable -->
。