匹配多次出现的以字符开头的行

时间:2018-12-17 21:29:56

标签: regex

我想编写一个正则表达式,该正则表达式与以可选空白<,一堆东西然后是>开头的行匹配。例如,这整件事应该匹配3次:

<div
    data-test="foo"
    class="first bar baz"
>
   <h2>test</h2>
</div>

我可以正常工作,它使用以下正则表达式:(^\s*<.*?>\s*$)+。进行操作here进行检查。

但是,它当前可以通过生成三个匹配项来工作。有没有办法使匹配的相邻行作为一个匹配返回?

在上面的示例中,由于所有内容都匹配,因此我希望将其作为单个匹配项返回。会发生吗?

编辑:要澄清-正则表达式应匹配:

<foo>

    <h1>test</h1>

甚至

  <   b-8253j'\sf>

但忽略

foo<bar>

因为它没有有效地以<开头。

如果在同一行上没有找到>,它将继续匹配所有行,直到达到>

   <div
   matches
   here>but this line is also matched</div>

正如我所说,我的正则表达式就是这样做的。但是,它会与此匹配:

<div>
<foo></foo>
<baaaar>

三个不同的时间。由于所有内容都匹配,因此我希望将这些匹配项合并并作为单个匹配项返回。

但是,例如,如果中间行无效,则应返回2个匹配项:

<div>         // match 1
no<foo></foo> // doesn't start with `<`, ignored
<baaaar>      // match 2

1 个答案:

答案 0 :(得分:0)

您指定了一个惰性匹配项(匹配尽可能少的子字符串)。删除问号,它会尝试一个贪婪的(匹配最大可能的子字符串): (^\s*<.*>\s*$)+

但是通常使用正则表达式处理HTML会使您走上一条痛苦的路。