これらの数値を見つけるには、グループ メカニズム (正規表現の丸括弧) を使用できます。
import java.util.regex.*;
...
String data = "letters.1223434.more_letters";
String pattern="(.+?)\\.(.+?)\\.(.+)";
Matcher m = Pattern.compile(pattern).matcher(data);
if (m.find()) //or while if needed
for (int i = 1; i <= m.groupCount(); i++)
//group 0 == whole String, so I ignore it and start from i=1
System.out.println(i+") [" + m.group(i) + "] start="+m.start(i));
// OUT:
//1) [letters] start=0
//2) [1223434] start=8
//3) [more_letters] start=16
しかし、あなたの目標が2つのドットの間のテキストを置き換えるだけなら、おそらくreplaceFirst(String regex, String replacement)
Stringオブジェクトのメソッドを試してみてください:
//find ALL characters between 2 dots once and replace them
String a = "letters.1223434abc.more_letters";
a=a.replaceFirst("\\.(.+)\\.", ".hello.");
System.out.println(a);// OUT => letters.hello.more_letters
regex
2 つのドット (これらのドットを含む) の間のすべての文字を検索するよう指示するため、replacement
".hello." にする必要があります。(ドット付き)。
文字列にさらにドットがある場合、最初と最後のドットの間のすべての文字が置き換えられます。パターンを満たすために必要な最小数の文字を正規表現で検索する場合は、Reluctant Quantifier を使用する必要があります ->?
のように:
String b = "letters.1223434abc.more_letters.another.dots";
b=b.replaceFirst("\\.(.+?)\\.", ".hello.");//there is "+?" instead of "+"
System.out.println(b);// OUT => letters.hello.more_letters.another.dots