这让我发疯,我找不到有效的解决方案!
我正试图在几个标签之间做一个正则表达式,这个时候我听说但是必要的坏主意: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/上实际上得到了无效的表达式,并且最多没有匹配。
任何帮助表示赞赏!
答案 0 :(得分:2)
您正在尝试实现可变长度的lookbehind,其中大多数正则表达式语言和notepad ++不支持。我假设您使用的是notepad ++,因此您可以使用\K
转义序列。
<body[^>]*>\K.*?(?=<div id="bar">)
\K
转义序列会重置报告的匹配项的起始点,并且不再包含任何以前消耗的字符。确保您也检查了.
匹配换行符复选框。
或者,您可以使用捕获组并避免使用外观断言。
<body[^>]*>(.*?)<div id="bar">
注意:使用捕获组,您可以参考群组索引“1”来获取匹配结果。
答案 1 :(得分:1)
使用以下模式:
/<body[^>]*>(.*?)<div id="bar">/