2016-07-06 8 views
2

一致するパターンの前に単語をキャプチャしようとしました。私の検索語は「エール」です。私はGolden pale言葉だけ欲しいJavaで一致するパターンの前に単語をキャプチャする正規表現

"Golden pale ale by @KonaBrewingCo @ Hold Fast Bar", 

ale

入力する前の単語を取得する必要があります。一致するパターンの前に単語を取得するだけです。

String pattern = "\w+\s" + "ale"; 
Pattern regex = Pattern.compile(pattern); 
Matcher m = regex.matcher(stat); 
if(m.find()){ Do something } 

しかし、Javaでエラーが表示されます。誰でも助けてください!

+0

「エール」の前にどのくらいの単語をキャプチャしますか? – rock321987

+0

部分文字列「ale」や単語「ale」を含む単語の前に単語が必要なのですか? ** http://ideone.com/7qjSbq**を参照してください。 –

+0

一般的な正規表現をこのWebでjava正規表現として変換することができます。http://www.regexplanet.com/advanced/java/index.htmlエスケープ文字のような失敗は避けます。 – Alex

答えて

2

:あなたはこのような何かをする必要が

String keyword = "ale"; 
String rx = "\\w+\\s+\\w*" + keyword; 
Pattern p = Pattern.compile(rx); 
Matcher matcher = p.matcher("Golden pale ale by @KonaBrewingCo @ Hold Fast Bar"); 
if (matcher.find()) { 
    System.out.println(matcher.group(0)); // => Golden pale 
} 

IDEONE demo

パターンを参照してください。説明

  • \w+ - 1以上の英数字または下線文字
  • \s+ - 1+空白
  • \\w*\W+も句読点、および他の非単語の文字と一致します) - 前のゼロまたはそれ以上の単語文字(任意の部分を....
  • ale - リテラル文字シーケンス。
+0

ありがとう、それはうまく動作しますが、代わりに3ワードを得る方法。 – prabhu

+0

例の文字列を共有してください。また、['String rx ="(\\ w + \\ s +){3} \\ w * "+キーワード;'](http://ideone.com/WcEhvH)を試してください。 –

+0

@ウィクスターStribiżew、私はコルニッシュペールエールを取得する場合は、(例:この正規表現 "\\ w + \\ sを試してみてください"私はこのサンプルでは薄いエールを得た正規表現によって、 "トリビュートコーンウォールペールエールを@staustellbrewで飲む" \\ w * {0,3} ")、運がありません。 – prabhu

0

文字\はエスケープ文字です。検索文字列が別の単語の一部として、あなたがale\w*を追加する必要が表示されます場合は

String pattern = "\\w+\\s" + "ale"; 
関連する問題