2

文字列を取得して、パターンのすべてのインスタンスとパターンのみを抽出する必要があります。

String test = "This is a test string to experiment with regex by separating every instance of the word test and words that trail test";

したがって、パターンはtest単語と、その前後の単語ではない単語を見つける必要がありtestます。したがって、基本的には、このパターンの 3 つのインスタンスが見つかる必要があります。

私が期待している3つの結果は次のとおりです。

  1. This is a test string to experiment with regex by separating every instance of the word
  2. test and words that trail
  3. test

私は gskinner で正の先読みと負先読みをいじってみましたが、まだ運がありません。

4

2 に答える 2

4

これを試して

(\s*\b(?!test\b)[a-z]+\b\s*)*test(\s*\b(?!test\b)[a-z]+\b\s*?)*

こちらの Regexrを参照してください。

Java では に置き換えます[a-z]\p{L}、regexr は Unicode プロパティをサポートしていません。\p{L}プロパティ letter を持つUnicode コード ポイントです。これは、任意の言語のすべての文字に一致します。

説明:

(\s*\b(?!test\b)[a-z]+\b\s*)*「test」ではない一連の単語に一致しています。これは、否定先読みアサーションによって保証され(?!test\b)ます。

test「テスト」に一致しています

そして最後にもう一度:「テスト」ではない一連の単語をもう一度一致させます(\s*\b(?!test\b)[a-z]+\b\s*?)*

于 2013-01-18T10:59:02.293 に答える
0

私のコメントをフォローアップするために、テスト文字列をパターンで分割し\btest\b、文字列部分を左右に結合することを想像できます

String parts[] = test.split("\btest\b", -1);
for (int i = 0; i < parts.length - 1; ++i)
    System.out.println(parts[i] + "test" + parts[i + 1]);
于 2013-01-19T14:48:04.557 に答える