サンプルコード:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Regex {
public static void main(String[] args) {
String data = "Shyam and you. You are 2.3 km away from home. Lakshmi and you. Ram and you. You are Mike. ";
Pattern pattern = Pattern.compile(
"\\s*((?:[^\\.]|(?:\\w+\\.)+\\w)*are.*?)(?:\\.\\s|\\.$)",
Pattern.DOTALL);
Matcher matcher = pattern.matcher(data);
while (matcher.find()) {
System.out.println(matcher.group(0));
}
}
}
出力:
You are 2.3 km away from home.
You are Mike.
上記のコードを実行すると、期待される出力が得られます。しかし、問題は、同じ正規表現をより大きな string でテストすると、オーバーフロー エラーが表示されることです。同じことを調べてみたところ、正規表現の (A|B)* のような変更が問題の原因であることがわかりました。この問題を解決する方法はありますか? 助けてください。