正则表达式选择未包含在段落中的文本,即使它包含div

时间:2016-05-23 17:29:59

标签: regex

我想找到未包含在段落中的起始文本。

这是我想要识别的模式:

  1. 以DATA [
  2. 开头
  3. 然后是可选的DIV
  4. 然后是0或更多空格
  5. 直到第一个P
  6. 所以应该选择这些行:

    DATA[<div> Lorem ipsum <p>..
    DATA[Lorem ipsum <p>..
    

    并排除这些:

    DATA[<p>Lorem ipsum</p>..
    DATA[<div><p>Lorem ipsum</p>..
    DATA[<div> <p>Lorem ipsum</p>..
    

    在线研究之后,这是我提出的查询,但它会选择所有行,包括我想要排除的行:

    (DATA\[(<div>(\s)*)?)(?!<p).+?<p>
    

    有人可以指导我出错的地方吗?

1 个答案:

答案 0 :(得分:1)

注意: - 仅适用于支持PCRE

的引擎

您可以使用atomic group之类的

(DATA\[(?>(<div>)?\s*)).+?<p>

<强> Regex Demo

原子组 减少了回溯。因此,原子组的一部分要么失败要么作为一个单位成功。

您还可以使用占有量词

(DATA\[((<div>)?\s*)*+).+?<p>

<强> Regex Demo