2016-06-13 4 views
-1

間のスペースを持つ単語の文字列に一致しますが、私はどこでもそれを見つけるカントので、スペースで区切られています。最初の文字は、文字および/または(なしを含む)の任意の数:入力は無関係何も持っていないフォーマットの各変数< varは>一般的なプログラミング言語の型の変数である正規表現は、私はこれを聞いて最初にカント

<var> <var> <var> ... <var> 

文字列でありますまたは数字。

私は正規表現の文字列

"(?i)([a-z][a-z0-9]*)[\\s+([a-z][a-z0-9]*)]+" 

を使用していると私は汚いバックスラッシュの使用を避けるために、例えばA〜Zを綴りますよ。

パターンは基本的には動作しますが、MatcherのgroupCount()を取得すると、常に1となり、入力全体です。変数がキャプチャされないのはなぜですか?

私のロジックは、最初の変数にマッチさせてから、繰り返し空白と他の変数のペアをマッチさせることです。繰り返すパターンを間違って言いましたか?私はパターンが一致する場合はsplit()を使用する代わりに、正規表現をよりよく理解したいと考えています。また、不思議なことに、パターンは、変数の長さが1より大きい、例えば "abc"のような、存在した後に必要なスペースがないときには1つの変数にマッチします。

+1

あなたが持っているコードを投稿してください。あなたは 'while(matcher.find()){/ *ここで一致する* /}'を使いましたか? –

答えて

0

[\\s+([a-z][a-z0-9]*)]文字クラスの意味である:以下

  • 空白
  • (
  • -Zのいずれかに一致
  • 0-9
  • *
  • )

おそらく(xx)または(?:xx)であり、[xx]ではありません。

(xx)とするとgroupCount() == 3が表示されます。
(?:xx)を入力するとgroupCount() == 2と表示されます。

たとえば、を参照してください。これは、最初と最後の変数のみを取得するため、必要なものがどれもないことも示しています。

の文字列を検証することができますが、split()は必要な値を取得する最も良い方法です。

+0

ありがとうございます。私は大括弧が正しいと思わなかったことを知っていましたが、括弧が正しいとは思わなかった - それは奇妙な不一致を説明します。私はcatpuringまたは非キャップグループのタイプについて考えなかったが、私はそれらを試してみる。 IDEONEの例は明確です。しかし、私はまだ新しいコードを試していないので、私はまだgroupCountが正しいか、split()が必要かどうかは分かりません。正規表現のすべての修正で、グループはすでにキャプチャされているはずですが、過去の経験を念頭に置いて、ネストされたグループ(PHP、ColdFusion)になっている可能性があります。 – ProgrammerGuy

+0

p.s. - まだそれはコード化されていませんが、groupCountが新しい式で2または3になっているだけで、正規表現にすべての要素を返すことはおそらく不可能です。スプリットも機能します。再度、感謝します。 – ProgrammerGuy

関連する問題