0

多年来,我一直在为正则表达式苦苦挣扎。我需要的是从字符串中删除所有空格,而不是从 < tags > 中删除(例如,a href 标记或 img src 标记必须有空格)。

我正在用 PHP 做这件事,我正在尝试不同的解决方案(我完全是一个正则表达式的菜鸟,这让我很困惑)。到目前为止,这是我的代码的一部分:

$text=$_POST["text"];
$pattern = '(\<.+?\>)|\s'; 
$replace = '';
echo preg_replace( $pattern, $replace, $text );

这有什么问题?:(

4

2 回答 2

6

首先,您忘记了正则表达式周围的分隔符。然后,正则表达式/(\<.+?\>)|\s/匹配标签或空格,因此您将其中一个preg_replace()替换为空字符串。

至少可以说,用正则表达式操作 HTML 是很困难的。如果您可以确定文件中的任何地方都没有任何<s 和>s ,除了它们分隔标记的位置,您可以查找最接近的括号(如果有)是开头括号的空格:

$result = preg_replace(
    '/\s+     # Match one or more whitespace characters
    (?!       # but only if it is impossible to match...
     [^<>]*   # any characters except angle brackets
     >        # followed by a closing bracket.
    )         # End of lookahead
    /x', 
    '', $subject);
于 2012-05-10T17:54:02.820 回答
2

非正则表达式解决方案。

function remove_non_tag_space($text){
    $len = strlen($text);
    $out = "";
    $in_tag=false;
    for($i=0;$i<$len; $i++){
        $c = $text[$i];
        if($c=='<')
            $in_tag=true;
        elseif($c=='>')
            $in_tag=false;

        $out .= $c==" "? ($in_tag? $c: ""): $c;
    }
    return $out;
}

在此处查看示例http://ideone.com/oI0DI

于 2012-05-10T17:56:35.457 回答