我试图仅匹配打开/关闭段落标记之间的内容。在RegExr上玩它,我可以<p.*?>
匹配一个开头的段落标记,该标记可能有也可能没有任何其他属性,如类和/或ID。
但是,当我尝试将该模式添加到正面背后时,它会中断,我不知道为什么。我已尝试转义<
和>
符号,但这似乎没有帮助。然而,展望未来完美无缺。
以下是整个模式的示例:
(?<=\<p.*?\>).*?(?=</p>)
我希望能够仅匹配段落标记中的内容,而不是包含标记本身。因此,为什么我试图使用前瞻和后视。
答案 0 :(得分:3)
使用lookbehinds的问题在于,在大多数正则表达式引擎中,不允许在其中使用重复。
(?<=.*)
由于*
量词,这是无效的。如果它是{8}
,那就没关系,因为它是固定宽度。
我的建议是匹配所有内容,并使用捕获组和反向引用来处理您的数据。
<p.*?>(.*?)<\/p>
因此,$1
或\1
将包含您想要的数据。
答案 1 :(得分:1)
你不应该使用regex
来完成这类任务。可以找到许多问题。
看这篇文章:Should I use regex or just DOM/string manipulation?
使用DOMDocument这很简单。
示例示例:
$str= "<p>tetsd</p> doutside <p> 232323234</p>";
$doc = new DOMDocument();
$doc->loadHTML($str);
foreach($doc->getElementsByTagName('p') as $para) {
echo $para->textContent;
}