两个正则表达式之间的正则表达式匹配

时间:2014-09-10 02:31:16

标签: regex

这让我发疯,我找不到有效的解决方案! 我正试图在几个标签之间做一个正则表达式,这个时候我听说但是必要的坏主意:P 我在开始时的内容是<body class="foo">,其中foo可以在文件之间变化 - <body.*?>搜索可以正常查找每个文件中的唯一副本。

最后我有一个<div id="bar">,条形文件之间没有变化。

例如。

<body class="foo">
sometext
some more text
<maybe even some tags>
<div id="bar">

我需要做的是选择两个标签之间的所有内容,但不包括它们 - 关闭&gt;之间的所有内容。在身体和开口&lt;在div上 - 有些甚至可能是某些标签。

我尝试了很多东西,主要是(?<=<body.*>)(.*?)(?=<div id="bar">)上的变体,但我实际上在记事本++,http://regexpal.com/上实际上得到了无效的表达式,并且最多没有匹配。

任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:2)

您正在尝试实现可变长度的lookbehind,其中大多数正则表达式语言和notepad ++不支持。我假设您使用的是notepad ++,因此您可以使用\K转义序列。

<body[^>]*>\K.*?(?=<div id="bar">)

\K转义序列会重置报告的匹配项的起始点,并且不再包含任何以前消耗的字符。确保您也检查了.匹配换行符复选框。

或者,您可以使用捕获组并避免使用外观断言。

<body[^>]*>(.*?)<div id="bar">

注意:使用捕获组,您可以参考群组索引“1”来获取匹配结果。

答案 1 :(得分:1)

使用以下模式:

/<body[^>]*>(.*?)<div id="bar">/