更换所有不符合';t以一个html标记开始和结束,标记本身用一个<;p>;PHP中的元素?
我有一些来自TinyMCE编辑器的内容,出于某种原因,它在一些内容周围没有html标记 我正在做一个导出和导入到一个新系统中的工作,我希望通过将所有不以html标记开头和结尾的行包装在一个“p”标记中来清理这个问题 例如:更换所有不符合';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
<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+
,唯一的意思是将
保持在同一行。但是,如果内容的最后一行没有以换行符结尾,则会失败
编辑:
- 允许在行的开头使用空格
- 修改表达式以允许最后一行没有尾随换行符
在行的开头锚定/^
跳过开头的空白\s*
(?![您是否非常感谢与我们分享您的尝试?我想不出在没有任何html标记的行上使用regex可以选择什么。因此我尝试选择所有以“”开头的行我使用的正则表达式是:
,但我对正则表达式不太熟悉,有一种感觉,这是错误的,因为对我来说,没有定义只在行首和行尾进行匹配。你使用的是/
思想更正,对不起,f或者输入错误。“positive”在任何方面都不是很合适。=)你可以使用负向前瞻
正向前瞻
作为
^(?=[^这是有效的!但是我遇到了一个新问题。如果html的任何一行缩进,它仍然会将其包装为“p”标记。我猜是因为它在开始时没有考虑到空格。@JoeGrigg是的。包括空格