1

私は次のパターンを持っています:

[\{\}].*[\{\}]

次のテスト文字列を使用します(必要に応じてさらに提供できます)。

}.prop{hello:ars;} //shouldn't match
}#prop{} //should match
}.prop #prop {} //should match

このパターンの目的は、空のcssルールセットを見つけることです。2番目の角かっこのセットの間の文字との一致を除外する方法を誰かが提案できますか?解決策に近づいたら、パターンを更新します。

編集: http: //gskinner.com/RegExr/で このパターン:[\}].*[\{]{1}[/}]{1} 私が理解していない理由でphpに転送すると壊れていますが、望ましい結果が得られているようです。

編集:これが別の質問である必要がある場合は、最初に謝罪します。PHPの最初の編集でパターンを使用する:

    $pattern = "/[\}].*[\{]{1}[/}]{1}/";
    preg_match_all ($pattern, $new_css, $p);
    print_r($p);

$ new_cssが、空のルールセットを含むアップロードされたcssファイルのコンテンツの文字列である場合、$pが入力されることはありません。しかし、私はこのパターンが大丈夫であることを知っています。誰かが問題が何であるかを見ることができますか?

編集:最終的な解決策

//take out other unwanted characters
        $pattern = "/\}([\.#\w]\w+\s*)+{}/";
        //do it twice to beat any deformation
        $new_css = preg_replace ($pattern, '}', $new_css);
        $new_css = preg_replace ($pattern, '}', $new_css);
4

2 に答える 2

1

正規表現を一重引用符で囲むか、\文字を2倍にしてみてください。PHPが\二重引用符で囲まれた文字列を処理する方法は、正規表現を壊して、に\{なることです。{

于 2012-07-18T16:40:10.760 に答える
0

パターンを試してください:'/}([\.#]\w+\s*)+{}/'

$new_css = "{}.prop{hello:ars;}
{}#prop{} //should match
}.prop #prop {} //should match
}.prop { aslkdfj}
}.prop { }
";

$pattern = '/}([\.#]\w+\s*)+{}/';
preg_match_all ($pattern, $new_css, $p);
print_r($p);

これは以下を出力します:

Array
  (
    [0] => Array
    (
      [0] => }#prop{}
      [1] => }.prop #prop {}
    )

    [1] => Array
    (
      [0] => #prop
      [1] => #prop
    )
  )
于 2012-07-18T17:26:25.400 に答える