1

この文字列が欲しい:

value="1,'goahead'" your='56' so='"<br />"'

次のようにphp正規表現が結果配列を返すようにします:

value="1,'goahead'"
your='56'
so='"<br />"'

私はこの正規表現を試しました:

preg_match_all("#([\d\w_]+)\s*=\s*(\"|')([^'\"]*)(\"|')*#isx")

しかし、この値を取得できませんでした:value="1,'goahead'"

値内のシングルクォーテーションが原因だと思います。改善されたパターンを教えてください。

4

3 に答える 3

1

DOMDocumentを見ることをお勧めします:

入力が完全なタグの場合...

<p value="1,'goahead'" your='56' so='"<br />"'>

...次に、これを行うことができます:

$DOM = new DOMDocument;
$DOM->loadHTML($str);
foreach ($DOM->getElementsByTagName('p')->item(0)->attributes as $attr) {
  $attributes[$attr->nodeName] = $attr->nodeValue;
}

これにより、探している配列が得られます。

Array
(
    [value] => 1,'goahead'
    [your] => 56
    [so] => "<br />"
)

作業例: http://3v4l.org/TIIZ2

于 2013-04-11T19:10:39.333 に答える
0

この正規表現を使用したほうがよいでしょう:

/(\w+)\s*=\s*(["'])(.*?)\2/

これにより、最初のサブパターンに属性名、2 番目に使用される引用符のタイプ、3 番目に属性値が与えられます。

特に重要なのは、.*?レイジーに一致する (つまり、可能な限り少ない) と、\22 番目のサブパターン (この場合、使用される引用符) に一致する です。\"ただし、これはorでのエスケープを許可しません\'。それはもう少し関与することです。

于 2013-04-11T19:04:34.073 に答える
0

どのようにしてこれを行うことになるのか、とにかくこれが役立つ理由を尋ねるのが怖いです。

if (preg_match('%(value="\d+,(\s+)?\'[a-z]+\'"(\s+)?)?(your=\'\d+\'(\s+)?)?(so=\'"<br(\s+)?\/>"\')?%six', $subject, $matches)) { }

于 2013-04-11T19:07:21.760 に答える