仅替换不包含html标记的行

时间:2018-01-26 20:52:50

标签: php regex

我对RegEx环境的了解仍然不够大。这个例子应该证明我的问题 - 我希望如此。我解析文本并呈现HTML。目前,我的问题是为每个文本设置段落标记,段落没有标记和行结束。

示例文字:

<h1>Header</h1>\nA simple text with less of words. Yes much more lines.\n<h2>Tests</h2>\nThe solution is still active in his tests.\n

我想在每行(<p>之前和<p>之后)添加一个简单的段落</p>标记,如果它没有标记或空行,例如{{1} }。

以下示例的目标应如下所示:

''

我试过了

我当前的RegEx解析了这个问题,但是如果我有一行是空的,或者在标记之后的空行之后有问题,例如<h1>Header</h1>\n<p>A simple text with less of words. Yes much more lines.</p>\n<h2>Tests</h2>\n<p>The solution is still active in his tests.</p>\n

</code>\n

我也尝试使用否定关闭像'#(?![a-z][0-9]).(.*\n)#' 这样的HTML标记。

在线测试

https://regex101.com/r/khYWy4/2

1 个答案:

答案 0 :(得分:1)

如果可以,请使用其他工具!

根据您的使用方式,我建议您找到一个不基于正则表达式的解决方案。通过在适当的脚本或程序中迭代行来更好地解决这个问题,也许是首先生成html的行,并注入你需要的标记。

话虽如此,我很欣赏有时没有最佳解决方案。

我试图解决你的案件

我已经用替换来更新你的例子,这似乎做了你想做的事。

\n([^<>\n;]+?)\n

替换为

\n<p>\1</p>\n

更新的示例:

https://regex101.com/r/khYWy4/3

请注意以下几点:

  1. 我忽略了任何已包含任何html标签的行。
  2. 我忽略任何包含分号的行,以避免代码块中的

    标记。

  3. 声明!

    根据您所看到的其他情况,这些简单的跳过只是为了让您的示例正常工作。我无法保证这适用于更大的数据集。