12

私は長い紐を持っています。すべての一致を一致する正規表現 (グループ) の一部に置き換えたい。

例えば:

String = "This is a great day, is it not? If there is something, THIS IS it. <b>is</b>".

すべての単語を に置き換えたいとし"is"ましょう"<h1>is</h1>"。ケースはオリジナルと同じままである必要があります。したがって、私が望む最終的な文字列は次のとおりです。

This <h1>is</h1> a great day, <h1>is</h1> it not? If there <h1>is</h1> something, 
THIS <h1>IS</h1> it. <b><h1>is</h1></b>.

私が試していた正規表現:

Pattern pattern = Pattern.compile("[.>, ](is)[.<, ]", Pattern.CASE_INSENSITIVE);
4

6 に答える 6

15

このMatcherクラスは、一般に と組み合わせて使用​​されPatternます。メソッドを使用Matcher.replaceAll()して、文字列内のすべての一致を置き換えます

String str = "This is a great day...";
Pattern p = Pattern.compile("\\bis\\b", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(str);
String result = m.replaceAll("<h1>is</h1>");

注:\b regex コマンドを使用すると、単語の境界 (空白など) で一致します。これは、"is" という単語のみが一致し、"i" と "s" の文字を含む単語 ("island" など) が一致しないようにするために使用すると便利です。

于 2012-06-02T21:26:53.663 に答える
9

このような:

str = str.replaceAll(yourRegex, "<h1>$1</h1>");

$1、正規表現のグループ #1 によってキャプチャされたテキストを指します。

于 2012-06-02T21:21:05.497 に答える
3

マイケルの答えの方が優れていますが、たまたま境界としてのみ必要な[.>, ]場合[.<, ]は、次のようにすることができます。

String input = "This is a great day, is it not? If there is something, THIS IS it. <b>is</b>";
Pattern p = Pattern.compile("(?<=[.>, ])(is)(?=[.<, ])", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(input);
String result = m.replaceAll("<h1>$1</h1>");
于 2012-06-02T21:27:59.010 に答える
0

そのために後方参照を使用するだけです。

"This is a great day, is it not? If there is something, THIS IS it. <b>is</b>".replaceAll("[.>, ](is)[.<, ]", "<h1>$2</h1>");すべきです。

于 2012-06-02T21:21:59.083 に答える