正则表达式只匹配html p标签或没有标签

时间:2016-06-08 21:38:23

标签: html regex

如果在此之前找不到p标记,我需要一个仅匹配第一个p标记(/<p>(.*)<\/p>/)或不以<开头的第一行的正则表达式。我尝试了这个:/(?!<)(.*)||<p>(.*)<\/p>/但是这会选择第一行,无论是否在行的乞讨处有<

如何才能选择以p标签开头或没有任何标签的第一行。

例如,它应该在这里选择<p>Text</p>

<h2>Tittle</h2>
<p>Text</p>

和文字在这里:

Text
<h2>Title</h2>
<p>More text</p>

2 个答案:

答案 0 :(得分:1)

首先,不要像这样使用.*。它会比你期望的更多。即上

<h2>Title</h2>
<p>More text</p><p>Another text</p>

你的比赛将是

More text</p><p>Another text

更好地使用<p>[^<]*<\/p>来真正匹配单个<p>的内部内容(如果内部没有其他html - 如果有,请使用HTML-Parser更容易)

第二 - 你的例子似乎很常见。如果它只是“文本”作为“第一个元素,则以下模式将成功:(<p>[^<]+<\/p>|\w+)

但是有各种各样的问题没有答案:标签是否允许在“文本之后”行中 - 是否应该匹配,还是仅仅是文本? HTML可以显示在<p>代码中吗?是否应匹配无效 html标签的行?等...

答案 1 :(得分:0)

试试这个

 (<p>(?:(?!</?p>).)+</p>)