2012-11-12 22 views
5

で後読み、私は次のために正規表現を見つけようとしています:Javaおよび正規表現

全世界がWORDがまったく単語でしか=後にしている可能性があり、正確@[email protected]に一致します。 は、私は次のよう作られた:のみ[email protected]@または@[email protected]しかし= @[email protected]のためではないのようなパターンのためではなく、作品
(?<==)#.*?#)
私はまたに興味がありません。には=が続きますが、それを理解できませんでした。
とにかく:(?<=\\s*=\\s*)#.*?#)のようなものを使用していますが、動作しません。
アイデア

注:奇妙なもののhereから、それは、可変長の後読みがはJavaでサポートされていないが、これは私に例外

答えて

0

を与えるものではありません。このパターンは、オプションのスペースと単語包まれ、続いてイコールに一致していると述べています@記号で:

Pattern pattern = Pattern.compile("= [email protected](.*)@"); 
Matcher matcher = pattern.matcher("[email protected]@"); 
if (matcher.matches()) { 
    System.out.println(matcher.group(1)); 
} 

// Prints: "WORD" 

あなたが達成したいタスクを誤解していない限り、見た目のヒントは必要ありません。ただし、以下の作業をする必要があり、次のように負のパターンは、その後行われ

Pattern pattern = Pattern.compile("(?<== ?)@(.*)@"); 
Matcher matcher = pattern.matcher("= @[email protected]"); 
if (matcher.find()) { 
    System.out.println(matcher.group(1)); 
} 

// Prints: "WORD" 

Pattern pattern = Pattern.compile("(?<!= ?)@(.*)@"); 
Matcher matcher = pattern.matcher("[email protected]@"); 
System.out.println(matcher.find()); 

// Prints: "false" 
1

あなたが見てビハインドを使用している場合、私は、あなたが直接PatternMatcherを使用していると仮定していますクリーンな単語("= @[email protected]"の代わりに"@[email protected]")をキャッチする。

それは確かにそうであるならば、あなたがする必要があるすべては、ルックビハインド内の任意の空白を追加している:ここでは

(?<==\\s?)@.*[email protected]


"@[email protected]"を返す、テストコードです:

Matcher m = Pattern.compile("(?<==\\s?)@.*[email protected]").matcher("= @[email protected]"); 
m.find(); 
System.out.println(m.group());