【问题标题】:Regex to trim text between tags正则表达式修剪标签之间的文本
【发布时间】:2013-11-09 11:17:16
【问题描述】:

我原以为这是一个简单的正则表达式,但我想今天早上我的脑袋并没有搞砸!

我正在获取一个页面的源代码并用一堆其他 preg_replaces 整理它,所以当我们到达下面的正则表达式时,结果已经是一个单行字符串,其中去除了诸如 cmets 之类的东西,等等

我现在要做的就是修剪 > 和

<p>    hello world   </p>

应该变成

<p>hello world</p>

我认为这可以解决问题,但它似乎什么也没做?

$data = trim(preg_replace('/>(\s*)([^\s]*?)(\s*)</', '>$2<', $data));

干杯。

【问题讨论】:

  • 不要使用正则表达式进行整理。使用HTMLTidy
  • 我不只是整理 - 我正在删除 doctype、head、scripts、cmets 等。HTMLTidy 更快吗?
  • @Ric,你检查我的答案了吗?

标签: php regex spaces


【解决方案1】:

你可以使用这个sn-p的代码。

$x = '<p>    hello world   </p>';
$foo = preg_replace('/>\s+/', '>', $x);  //first remove space after ">" symbol
$foo = htmlentities(preg_replace('/\s+</', '<', $foo)); //now remove space before "<" symbol
echo $foo;

【讨论】:

    【解决方案2】:

    这是一种荒谬的做法,哈哈:

    $str = "<p>    hello world   </p>";
    $strArr = explode(" ", $str);
    $strArr = array_filter($strArr);
    var_dump(implode(" ",$strArr));
    

    利用数组的力量来去除空格lol

    【讨论】:

      【解决方案3】:

      您可以在正则表达式中使用 /e 修饰符在替换时使用 trim() 函数。

      $data = preg_replace('/>([^<]*)</e', '">" . trim("$1") . "<"', $data);
      

      【讨论】:

      • 完美,谢谢!这里有很多好的答案,但这个是最简单的,并且很好地融入了我的代码。
      【解决方案4】:

      正则表达式可以是:

      >\s+(.*[^\s])\s+<
      

      但不要使用它,有更好的方法可以实现该目标(例如:HTMLtidy)

      【讨论】:

        最近更新 更多