如果在此之前找不到p标记,我需要一个仅匹配第一个p标记(/<p>(.*)<\/p>/
)或不以<
开头的第一行的正则表达式。我尝试了这个:/(?!<)(.*)||<p>(.*)<\/p>/
但是这会选择第一行,无论是否在行的乞讨处有<
。
如何才能选择以p标签开头或没有任何标签的第一行。
例如,它应该在这里选择<p>Text</p>
:
<h2>Tittle</h2>
<p>Text</p>
和文字在这里:
Text
<h2>Title</h2>
<p>More text</p>
答案 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>)