我有以下样本数据集:
<p>first line\n
second line\n
third line\n</p>
first line\n
second line\n
third line\n
使用正则表达式,我如何匹配换行符,但仅限于它们在段落标记内。
此代码将在php中使用。
答案 0 :(得分:2)
你可以将它分成两个正则表达式。首先拆分<p>
代码(<p>.*?</p>
),然后匹配结果中的换行符。
分而治之。一些小的正则表达式通常比大型正则表达式更快。</ p>
我假设您完全控制了HTML,并且知道它已经很好了。因为在大多数情况下在html上使用正则表达式是禁止的。改为使用DOM解析器。
答案 1 :(得分:1)
好吧,正则表达式不适合解析HTML(使用DomDocument)。你还说你要“匹配”。这意味着捕获吗?更换? “检查”?假设检查,这是一个粗略的:
$regex = '#(?i:<p[^>]*>[^\\n]*)(\\n)(?i:[^<]*</p>)#';
它与<p><i>foo\n</i></p>
不匹配,但它会匹配基本<p>
标记内部有新行的情况(没有html子项)。
我建议的是抓住DomDocument,做这样的事情:
$dom = new DomDocument();
$dom->loadHTML($html);
$pTags = $dom->getElementsByTagName('p');
foreach ($pTags as $p) {
$txt = $p->textContent;
if (strpos($txt, "\n") !== false) {
//You found a \n within a P tag
}
}