代码之家  ›  专栏  ›  技术社区  ›  Atif

使用php匹配html<p>标记的正则表达式

  •  6
  • Atif  · 技术社区  · 15 年前

    我有这样的内容

    <p>some content, paragraph 1</p>
    <p>some content, paragraph 2</p>
    <p>some content, paragraph 3</p>
    

    我想退回第一段,即

    <p>some content, paragraph 1</p>
    

    有人能帮我写regex代码吗?
    '<p>(.*.)</p>' 好像不管用

    3 回复  |  直到 13 年前
        1
  •  10
  •   SubniC    15 年前

    你可以这样做:

    if (preg_match('%(<p[^>]*>.*?</p>)%i', $subject, $regs)) {
        $result = $regs[1];
    } else {
        $result = "";
    }
    

    用正则表达式测试字符串,如果有匹配项,则得到第一个字符串,只有第一个,如果没有,则$result将是空字符串。

    如果您需要得到的结果超过第一个,您可以在$regs数组上迭代。您需要找到任何其他标签,将常规expresin更改为macht,例如,要查找您使用的图像标签:

    (<img[^>]*>.*?</img>)
    

    编辑: 如果您正在逐行处理(只处理您要查找的标记),则可以在expresion周围放置^…$以匹配整行,如下所示:

    if (preg_match('%^(<p[^>]*>.*?</p>)$%im', $subject, $regs)) {
        $result = $regs[1];
    } else {
        $result = "";
    }
    

    嗯,问候。

        2
  •  5
  •   Jari Keinänen Roberto Canogar    13 年前

    防止包含<pre>标记,可以使用:

    if (preg_match('/(<p(>|\s+[^>]*>).*?<\/p>)/i', $subject, $regs)) {
        $result = $regs[1];
    } else {
        $result = "";
    }
    
        3
  •  -2
  •   benhowdle89    15 年前
      if (preg_match("/\b1\b/i", "some content, paragraph 1")) {
        echo "A match was found.";
    } else {
        echo "A match was not found.";
    }
    

    其中1是匹配的术语…

    这有什么帮助吗?

    推荐文章