2010-12-13 12 views
1

正規表現を使用して名前を確認したいが、納得のいく結果が得られない。誰でも私の正規表現パターンで何をしているのかを教えてください。私はパタパタにアンダースコア(_)をチェックしていないのにもかかわらず、出力としてJack_Sparrowを得ている理由正規表現の混乱

foreach(Match m in 
(Regex.Matches("Jack_Sparrow","^[A-za-z]+[^-]*(\\d)*$"))) 
    { 
     Console.WriteLine("{0} found at index{1}",m.Value,m.Index); 
    } 

は、私が知っているかもしれませんか?私はむしろジャックスパローを出力したい。私は何が必要ですか?

+1

は、 'str_replace(" _ "、" "、$ username)'を実行する必要があります。しかし、あなたの問題を少し良く説明したり、いくつかの例を挙げたりしない限り、誰も本当に知ることができません。 – mpen

答えて

1

それを含むされるキャラクターの範囲の前半

[A-za-z]が大文字Aから小文字Z、小文字のAから、別の範囲の範囲を作成します。 A-zは、ASCII文字65(A)から文字12(A)までの範囲を作成します。 2(z)。アンダースコア文字の値は95で、間にあります。正規表現がアンカーされているので、この文字クラスis where the match is occurring。この例では、文字クラスをグループ化して括弧をグループ化し、「Jack_Sparrow」のテキスト全体をキャプチャしていることがわかります。

文字範囲を[A-Za-z]に変更することで、この特定の一致を解決できるはずです。しかし、それでもまだ最初の部分( "Jack")と一致し、[^-]*部分は残りの文字列( "_Sparrow")と一致しますが、依然として有効な一致になります。あなたが他のテキストの例を提供できる場合、私たちはあなたがこれをさらに洗練させるのを助けることができます。あなたが提供した最新の情報では、[^-]の問題を最もよく解決する方法を説明することは困難です。

+0

チャールズはまだ彼がこれを修正しても、それは '[^ - ]'のために一致し続けるだろうと、まだ正しいです。 – mpen

+0

@Ralph:はい、ちょうどそれに留意してください。私はこれまで言及すべきだった。 – eldarerathis

+0

本当にそうじゃない。彼は '$'で正規表現を終わらせます。それは文字列の最後に一致するか、まったく一致しません。これは "ジャック"にのみマッチしません*。 – mpen

1

[^-]は、 - 以外の文字をチェックするので、アンダースコアと一致します。私はあなたがここで一致させたいものを正確には分かりません。

文字以外のすべてをスペースに変更しようとしていますか?

+0

私は[^ - ]を省略し、出力として "Jack_Sparrow"を得ています。理由を知ることができますか? – Justin

0

foreachの( にマッチM(Regex.Matches( "Jack_Sparrow"、 "[^ A-ZA-Z]")){ Console.WriteLineを( "{0}のインデックス{1}で発見"、 m.Value、m.Index); }