5

次の正規表現を見つけようとしています。

@WORD@正確に一致するすべての世界WORDは、任意の単語である可能性がありますが、. の後にのみあり=ます。私は次のよう
(?<==)#.*?#)にしまし。フォローされていないこと にも興味がありますが、それを理解できませんでした。 とにかく次のようなものを使用します:しかし、うまくいきません。 何か案は? =@SOMEWORD@@ANOTHERWORD@= @WORD@
=
(?<=\\s*=\\s*)#.*?#)

注:奇妙ですが、ここから可変長の後読みはJavaではサポートされていないと書かれていますが、これは例外ではありません

4

2 に答える 2

1

後読みを使用している場合は、Patternand をMatcher直接使用して、きれいな ("@WORD@"の代わりに"= @WORD@") という単語をキャッチしていると思います。

その場合は、後読み内にオプションの空白を追加するだけです。

(?<==\\s?)@.*?@


以下は、以下を返すテストコードです"@WORD@"

Matcher m = Pattern.compile("(?<==\\s?)@.*?@").matcher("= @WORD@");
m.find();
System.out.println(m.group());
于 2012-11-13T20:10:32.823 に答える
0

このパターンはequalsに一致し、その後にオプションのスペースと@記号で囲まれた単語が続きます。

Pattern pattern = Pattern.compile("= ?@(.*)@");
Matcher matcher = pattern.matcher("=@WORD@");
if (matcher.matches()) {
  System.out.println(matcher.group(1));
}

// Prints: "WORD"

あなたが達成したいタスクを私が誤解しない限り、後読みの必要性を理解することはできません。ただし、以下は機能するはずです。

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

// Prints: "WORD"

次に、ネガティブパターンは次のように実行されます。

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

// Prints: "false"
于 2012-11-12T09:04:00.180 に答える