4

PHPpreg_match_allとREGEXの質問があります。

私は次のコードを持っています:

<?php

$string= 'attribute1="some_value" attribute2="<h1 class=\"title\">Blahhhh</h1>"';

preg_match_all('/(.*?)\s*=\s*(\'|"|&#?\w+;)(.*?)\2/s', trim($string), $matches);

print_r($matches);

?>

これは、引用符付きのHTMLで渡したいインスタンスのエスケープされた引用符を取得していないようです。REGEX修正の引用符内の基本的な引用符を使用して、これに対して多数の解決策を試しましたが、どれもうまく機能していないようです。この既存の正規表現内に正しく配置できないようです。

私は正規表現のマスターではありません。誰かが私を正しい方向に向けてくれませんか?

私が達成しようとしている結果はこれです:

Array
(
    [0] => Array
        (
            [0] => attribute1="some_value"
            [1] =>  attribute2="<h1 class=\"title\">Blahhhh</h1>"
        )

    [1] => Array
        (
            [0] => attribute1
            [1] =>  attribute2
        )

    [2] => Array
        (
            [0] => "
            [1] => "
        )

    [3] => Array
        (
            [0] => some_value
            [1] => <h1 class=\"title\">Blahhhh</h1>
        )
)

ありがとう。

4

1 に答える 1

1

ネガティブルックビハインドアサーションでこれを解決できます:

'/(.*?)\s*=\s*(\'|"|&#?\w+;)(.*?)(?<!\\\\)\2~/'
                                 ^^^^^^^^^

終了引用符の前に。を付けないでください\。私に与える:

Array
(
    [0] => Array
        (
            [0] => attribute1="some_value"
            [1] =>  attribute2="<h1 class=\"title\">Blahhhh</h1>"
        )

    [1] => Array
        (
            [0] => attribute1
            [1] =>  attribute2
        )

    [2] => Array
        (
            [0] => "
            [1] => "
        )

    [3] => Array
        (
            [0] => some_value
            [1] => <h1 class=\"title\">Blahhhh</h1>
        )
)

この正規表現は、エンティティであるため完全ではありませんが、引用符のように区切り文字としてそこにあるため、。を使用してエスケープすることもできます\。それが本当に意図されているかどうかはわかりません。

このすばらしい質問/回答も参照してください。文字列を区切り文字で分割しますが、エスケープされている場合は分割しません

于 2012-04-19T19:38:05.053 に答える