2016-09-11 6 views
-1

免責事項: xmlのregexを使用するのは危険で一般的には悪いことですが、正規表現エンジンに正規表現を入力するだけで、作成に必要なリソースを使うことができませんXMLベースの言語用の新しいシステムです。XML値をハイライトする正規表現


だから私は、次のような、XMLタグ内の値を取得するために正規表現を使用しようとしている:

<LoremIpsum>I NEED THIS PART</LoremIpsum> 

私は、これはいいと簡単だろうと思った、と私はちょうど(>.*<\/)を使用することができます。しかし、それは完全にすべての正規表現のテスターで動作しますが、すぐに.NETで使用しようとすると、完全に崩れてしまい、完全に予測できない出力になってしまいます。私は.NETを使用していると考えて、正規表現でこれを行う正しい方法は何でしょうSystem.Text.RegularExpressions

+0

1)スラッシュをエスケープしないでください。 2)取得するサブパターンの周りにキャプチャグループを設定します。 3)XMLでは、 '<'は直列化されずに残すことができないので、 '>'ではなく区切り文字としてそれに頼ります。 .Groups [1] .Value'](http://regexstorm.net/tester?p=%3e(%5b%)]を使用して、[Regex.Match(input、@ ">([^ <] *)<" 5e%3c%5d *)%3c&i =%3cLoremIpsum%3eI + NEED + THIS + PART%3c%2fLoremIpsum%3e)。 –

答えて

0

これは.NET Regexが貪欲であるためです。私の提案は.するのではなく、非貪欲.*?または[^<]を使用することです:それは<上を移動することはできません

(>.*?<\/) 
(>[^<]*<\/) 

ような。

0

あなたは何it completely messed up手段を定義していないが、これをやってみない:

(>.*?<\/) 

.*??が、それ以外の貪欲な試合になります。デフォルトでは、正規表現演算子は貪欲を意味するので、できるだけ一致します。貪欲でない形式は、できるだけのようにと一致します。差異を確認するには、両方のフォームに対して 'is test of'を一致させます。(>.*<\/)を指定すると、is <a>test</a> ofと一致します。 (>.*?<\/)is <a>testと一致します。

一致するXMLタグを避けたい場合は、@ ThomasWellerのソリューションを使用する必要があります。