2017-07-10 22 views
0

私はJavaで次の文字列を持っています。文字列と空白のJava正規表現の一致

ActivityRecord{7615a77 u0 com.example.grano.example_project/.MainActivity t20}

私の必要性は./と単語の後のスペースとの間の部分、つまり、文字列MainActivityを取得することです。

私は基本的に、与えられた文字と空白の中間で何かを捕まえることができる正規表現を探しています。

+2

そして、私は£1,000,000を必要としています。 [何か試しましたか?](https://stackoverflow.com/help/how-to-ask) – Michael

答えて

1

でそれをすべて置き換え:

(?<=\/\.)\w+?(?=\s) 

壊れた:

(?<= \/\. ) 
^ lookbehind 
    ^for a literal/followed by a literal . 

\w +? 
^ word character 
    ^one or more (non-greedy) 

(?= \s ) 
^ lookahead 
    ^a whitespace character 

Test it here

+1

Javaの正規表現で '/'をエスケープする必要はないことに気付く価値があります。なぜなら '/regex/flags'の構文は '/'が特殊文字ではないことを意味します。 – Pshemo

+0

@Pshemoそれを知らなかった。ありがとう。私はRegex101がそれをサポートしていないので、同じままにしておきます。 – Michael

+1

ありがとう、本当に素敵で詳細な説明! –

1

あなたの進行テキストは持っていないと仮定すると、/それ、あなたがそれにスペースを持っていない隔離するテキストでは、あなたが最初の開始から見えるこの

replaceAll("^[^/]*/\\.([^ ]*).*$","$1")); 

使用することができます。/、その後、/、あなたが表現を使用することができ、その時点から最初のスペースにすべてをキャプチャし、その後、他のすべてと一致し、キャプチャ

1

あなたのようなパターンで、この/\.(.*?)\sのような正規表現を使用することができます。

String str = ...; 
String regex = "/\\.(.*?)\\s"; 
Pattern pattern = Pattern.compile(regex); 
Matcher matcher = pattern.matcher(str); 

while (matcher.find()) {             
    System.out.println(matcher.group(1)); 
    //-------------------------------^-----get the group (.*?) between '/.' and 'space' 
} 

出力

MainActivity 
関連する問題