Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更换所有不符合';t以一个html标记开始和结束,标记本身用一个<;p>;PHP中的元素?_Php_Html_Regex_Preg Replace - Fatal编程技术网

更换所有不符合';t以一个html标记开始和结束,标记本身用一个<;p>;PHP中的元素?

更换所有不符合';t以一个html标记开始和结束,标记本身用一个<;p>;PHP中的元素?,php,html,regex,preg-replace,Php,Html,Regex,Preg Replace,我有一些来自TinyMCE编辑器的内容,出于某种原因,它在一些内容周围没有html标记 我正在做一个导出和导入到一个新系统中的工作,我希望通过将所有不以html标记开头和结尾的行包装在一个“p”标记中来清理这个问题 例如: <h1>Heading 1</h1> <p>This is the content of my first paragraph</p> <h1>Heading 2</h1> This is the con

我有一些来自TinyMCE编辑器的内容,出于某种原因,它在一些内容周围没有html标记

我正在做一个导出和导入到一个新系统中的工作,我希望通过将所有不以html标记开头和结尾的行包装在一个“p”标记中来清理这个问题

例如:

<h1>Heading 1</h1>
<p>This is the content of my first paragraph</p>
<h1>Heading 2</h1>
This is the content of my second paragraph
<h1>Heading 3</h1>
<p>This is the content of my third paragraph</p>
标题1
这是我第一段的内容

标题2 这是我第二段的内容 标题3 这是我第三段的内容

我希望它看起来像这样:

<h1>Heading 1</h1>
<p>This is the content of my first paragraph</p>
<h1>Heading 2</h1>
<p>This is the content of my second paragraph</p>
<h1>Heading 3</h1>
<p>This is the content of my third paragraph</p>
标题1
这是我第一段的内容

标题2 这是我第二段的内容

标题3 这是我第三段的内容

我正在寻找一个小的解决方案使用正则表达式,如果可能的话,并尝试了不少事情

有人有什么想法吗?

使用。断言检查其条件在以下(向前看)或之前(向后看)数据中是否存在(正)或不存在(负),但不使用任何字符

例如:

<?php

$cc = <<<'EOT'
<h1>Heading 1</h1>
<p>This is the content of my first paragraph</p>
<h1>Heading 2</h1>
    This is the content of my second paragraph
<h1>Heading 3</h1>
This is the content of my third paragraph
EOT;

$cc = trim($cc);
$dd = preg_replace('/^\s*(?![<])(.*?)(\s*)$/m', '<p>$1</p>$2', $cc);

echo $dd;

?>

第二个括号中有
\s+
,唯一的意思是将

保持在同一行。但是,如果内容的最后一行没有以换行符结尾,则会失败

编辑:

  • 允许在行的开头使用空格
  • 修改表达式以允许最后一行没有尾随换行符
trim()用于确保测试数据末尾没有空格。我还修改了测试数据,以反映新需求的测试可能性

正则表达式执行以下操作:

  • /^
    在行的开头锚定
  • \s*
    跳过开头的空白

  • (?![您是否非常感谢与我们分享您的尝试?我想不出在没有任何html标记的行上使用regex可以选择什么。因此我尝试选择所有以“”开头的行我使用的正则表达式是:
    /
    ,但我对正则表达式不太熟悉,有一种感觉,这是错误的,因为对我来说,没有定义只在行首和行尾进行匹配。你使用的是
    负向前瞻
    思想更正,对不起,f或者输入错误。“positive”在任何方面都不是很合适。=)你可以使用
    正向前瞻
    作为
    ^(?=[^这是有效的!但是我遇到了一个新问题。如果html的任何一行缩进,它仍然会将其包装为“p”标记。我猜是因为它在开始时没有考虑到空格。@JoeGrigg是的。包括空格