2011-02-02 11 views
1

私はよく知っているわけではないので、正規表現の助けが必要です。正規表現でタグ間のテキストを一致させよう

私は正規表現をしているよう:(。?+)

Regex myregex = new Regex("testValue=\"(.+?)\""); 

は何を示していますか?

一致する文字列は"testValue=123e4567"であり、出力として123e4567を返します。

今、私は出力として123e4567が必要な文字列"<helpMe>123e4567</helpMe>"と一致する正規表現で助けが必要です。どのように正規表現を書くのですか?

答えて

4

これは意味:あなたの正規表現の場合

( Begin captured group 
. Match any character 
+ One or more times 
? Non-greedy quantifier 
) End captured group 

を、非貪欲数量詞?は、あなたのキャプチャグループは、最初の二重引用符の後に始まり、その後、非常に次のダブルの直前に終了することを意味します遭遇する引用。貪欲(?なし)の場合、グループはその行で見つかる非常に最後の二重引用符に拡張されます(つまり、可能な限り多くの行を消費する「貪欲に」)。

<helpMe>(.+?)</helpMe> 

この文字列を考える:

ABCDE 

:あなたはこの試合を取得したい

<div>Something<helpMe>ABCDE</helpMe></div> 

あなたの "helpMe" 例えば

、あなたは、この正規表現をしたいと思います非貪欲定量器の値はこのバリエーションで明らかです:

Regex: <helpMe>(.+)</helpMe> 
String: <div>Something<helpMe>ABCDE</helpMe><helpMe>FGHIJ</helpMe></div> 

貪欲キャプチャは次のようになります。

ABCDE</helpMe><helpMe>FGHIJ 

は、これらの変化と遊ぶためにいくつかの便利な対話型ツールがあります。

+0

ありがとう:)今私は出力を得た –

+0

正規表現myregex =新しい正規表現( "(。+?)")は働いた! :) –

+0

あなたはそれを整理してうれしいです。 –

0

(。+?)は何を示していますか?

は、これは、任意の文字に一致する意味(。)を1回以上(+?)

あなたの2番目の文字列にマッチするシンプルな正規表現を

<helpMe>([a-z0-9]+)<\/helpMe> 

これはa-zの任意の文字と一致しますだろうおよびany digit内には、<helpme>および</helpMe>が含まれます。

pharantesesは、グループを取得するために使用されます。後でこのグループ内の値を参照する必要がある場合に便利です。

2

Ken Redlerは、あなたの最初の質問に関してgreat answerです。 2番目の質問の試みについて:

back reference \1を使用して
<(helpMe)>(.*?)</\1> 

あなたは一致するタグのセットの間の値を見つけることができます。最初のグループはタグ名を検索し、2番目のグループはコンテンツそのものと一致し、\1バックリファレンスは最初のグループの一致(この場合はタグ名)を再利用します。

また、C#では、<(helpMe)>(?<value>.*?)</\1>などの名前付きグループを使用できます。ここでmatch.Groups["value"].Valueには値が含まれています。

+0

+1を参照してください。 OPの場合に役立ちます。 –

関連する問題