如何在每个“<”之前确保HTML中有一个空格在“>”之后

时间:2015-12-04 12:45:37

标签: php html regex

我有一个比较单词的diff算法。当单词触摸标签时会出现问题:

<strong>Word

在这种情况下,它认为<只是一个单词,因为标签和单词之间没有空格。 (富文本编辑器不保证单词和标签之间的空格)

在每个标记开始>和结束<p>

之前,如何确保只有一个空格(如果已有空格,则不要复制空格)

我的代码与<p>代码完全相同,但我不知道如何修改正则表达式以修复所有代码。

$text = preg_replace_callback("!<p>([\S])!", function ($p) { return "<p> " . $p[1]; }, $text); $text = preg_replace_callback("!([\S])</p>!", function ($p) { return $p[1] . " </p>"; }, $text); 代码的代码:

[
{'id': 0, 'name': 'Housing', 'value': 3}, 
{'id': 1, 'name': 'Bank', 'value': 8}, 
{'id': 2, 'name': 'Entertainment', 'value': 3}
]

1 个答案:

答案 0 :(得分:1)

此代码将完成工作:

<?php
  $text = preg_replace_callback("!(<[a-zA-Z0-9]+>)([\S])!", function ($p) {
    return $p[1] . " " . $p[2];
  }, $text);
  $text = preg_replace_callback("!([\S])(</[a-zA-Z0-9]+>)!", function ($p) {
    return $p[1] . " " . $p[2];
  }, $text);
?>

您可以在(</[a-zA-Z0-9]+>)处找到任何可能的html标记(根据tag names specification)。