2017-01-06 1 views
1

特定の文字の前に文字列内のすべての単語を抽出する必要があります。この例ではコロン(:)です。例えば特定の文字の前のすべての単語を一致させる正規表現

:私は返すしたいの上に文字列から

String temp = "root/naming-will-look-like-this:1.0.0-SNAP"; 

"ルート" "命名" " " "のように"" 見て "だろう" この"

私は正規表現ではあまり良くありません。これまでこれまでに思いついたことがあります。

\w+(?=:) 

これは、コロン( "this")の直前に1語だけ返します。

以前にすべての単語を取得するにはどうすればよいですか?

ありがとうございます。

+0

"単語"の定義を教えてください。大文字と小文字を区別しないA〜Zのみを含むものはどれですか? – Michael

+0

はい、a-z、大文字と小文字を区別しません。 "r"、 "o"、 "o"、 "t"の代わりに "root"のような個々の文字ではなく単語として抽出された方が好きです – IrishCrf

+0

一回のマッチ操作で複数結果を収集する方法をより具体的にする必要があります。つまり、 'split'を使って配列を作成し(区切りパターンが必要です)、' Matcher'で 'find()'を繰り返し呼び出すことができます(単語パターンが必要です)...もし配列が必要な場合は、 'String [] array = temp.split(" \\ W *:。* | \\ W + ");' – Holger

答えて

4

あなたはこのような先読み使用することができます。

\w+(?=.*:) 

RegEx Demo

\w+はすべての単語にマッチしますし、先読み(?=.*:)たちは:先を持っていると主張しています。これは、内部の入力文字列以下のように複数のコロンをバイパスしません

\G(\w+)[\W&&[^:]]* 

+2

これは完璧です!ありがとうございました。私には答えとしてこれを受け入れます。 – IrishCrf

+0

複数のコロンがある場合、これは最後のコロンまでの単語を見つけることに注意してください。 – Holger

1

これを試してみてください:

String s = "root/naming-will-look-like-this:1.0.0-SNAP"; 
    s = s.replaceAll(":.*", ""); 
    String[] arr = s.split("\\W+"); 
0

あなたが最初のキャプチャグループに言葉を保存することができますJavaの文字クラスの交差点に加えて\Gアンカーを使用して

root/naming-will-look-like-this:1.0.0-SNAP:some-thing-else 
関連する問題