0

私は長い間正規表現に苦労してきました..必要なのは、文字列からすべての空白を削除することですが、 < タグ > からではありません (たとえば、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 に答える