0

次の形式のドキュメントがあります。

<scheme attr1="lorem" attr2="ipsum" global-test="text goes here" global-attr2="second text goes here">
</scheme>

正規表現を使用して、一致するすべての属性を抽出したいと考えていますglobal-(.*)。また、「scheme」要素でのみ一致できるため、次のような単純な正規表現を使用すること(global-([^=]*)="([^"]*)")+はできません。次の正規表現を試しました。

<scheme.*([\s]+global-([^=]*)="([^"]*)")+

ただし、これは「global-attr2」でのみ一致し、他のグローバル属性は .* セレクターの一部として表示されます。.* の * セレクターを遅延させても、役に立たないようです。

また、正規表現を使用して XML ドキュメントからデータを取得するのは適切ではないことはわかっていますが、このスクリプトはプリプロセッサ用です。解析する前に XML を変更します。

4

2 に答える 2

0

(...)+コンストラクトは期待どおりに機能しないと思います。マッチグループ配列を拡張する代わりに、以前のマッチを覆い隠し、最後のマッチのみを保存します。

何かを(。)*と照合して、phpの設定に当てはまるかどうかを確認してください。

私は試した

<scheme(.*?[\s]+global-([^=]*)="([^"]*)")+

(...)+の動作が異なる場合は、これが機能すると思います。

于 2012-05-16T23:24:41.987 に答える
0

preg_match_allはすべてに一致し、すべてを格納します。したがって、最初に「<scheme」と一致し、一致する場合は、次preg_match_allのようなものに対して Match を実行します

/global-(.*?)=(\w+)/

matches[0]matches[1]などから抽出します。

于 2012-05-16T23:42:48.603 に答える