私はすべての私の場合をカバーするために正規表現を書こうとしています。 私はXmlを解析し、いくつかのプロパティを取得する必要があります。 例:正規表現:任意の非捕捉グループ
<item p2="2"/>
<item p1="1" p2="2"/>
<item p1="1" p2="2" p3="3"/>
<item p1="1" p2="2" p3="3" p4="4"/>
<item p1="1" p2="2" p3="3" p4="4" p5="5"/>
私は「P2」プロパティの値をキャプチャするために持っていると私は、「P2」は常に行に存在するであろうことを知っています。 また、常に存在するとは限らない「p4」プロパティの値を取得したい。
最初に私は、最初の4例(例の最初の4行)を満たすためにしようとしていると私はこのような正規表現を書いた:
\<item.+?p2=\"(?<val1>\d+)".*?(?:p4=\"(?<val2>\d+)\")?\/\>
をそして、それは正常に動作します。 "val1"グループは常に値を返します。また、 "val2"グループは "p4"プロパティが提示された場合に値を返します。
しかし、私の最後のケースをカバーするために:私はこのように私の正規表現を変更した
<item p1="1" p2="2" p3="3" p4="4" p5="5"/>
:
\<item.+?p2=\"(?<val1>\d+)".*?(?:p4=\"(?<val2>\d+)\")?.*?\/\>
______________________________________________________^^^
そして、私は「VAL1」グループはまだ「val2のを」の値を返しますが、ことがわかりましたグループno moreはすべてのケースの値を返します。
あなたは私が逃していることを教えてください、そして私のすべてのケースをカバーするために正規表現を書くのに役立つでしょうか?
私はあなたにdownvoteをしませんでしたが、あなたの時間はXMLパーサーを使うことを学ぶことにもっと投資する方がよいでしょう。正規表現はXML解析にはあまり適していません。 –
ここで正規表現を使用することは本当に面倒です。引数が常に同じ順序で保証されますか?そうでない場合は、それぞれの注文に対して交替を行わなければなりません。 XMLパーサを使用すると、はるかに安全で安全です。 – Aaron
私はXmlを解析する正規表現を書くことは良い考えではないことを知っています。私はすでに他の楽器を使って実装しています。しかし、私の最初の実装ではこの動作が見つかりましたが、正規表現で実装する方法は不思議です。あなたが望むなら、私はXmlなしでサンプルを書き直すことができます。 – Aleksandr