私はjavaのPattern.matchesを使ってデータブロックを正規表現にマッチさせています。データのブロックは、単一行または複数行にすることができます。問題は、私のデータが15行以上(通常は17-18行以上)になると、私はstackoverflowerrorを取得し始めるということです。 15行未満のデータの場合、正規表現は正常に動作します。Pattern.matches()はStackOverflowErrorを返します
正規表現は、この形式のものである:
ドメイン名 - >空間 - > - >空間 - >数 - >空間 - > - >空間 - >数 - >改行
String regex = "^(([a-zA-Z0-9][a-zA-Z0-9\\-]*\\.)+([a-zA-Z]{2,})\\s*,\\s*\\d+\\s*,\\s*\\d+(\\r?\\n)?)+$";
データ私はこの正規表現に対してテストするために使用するブロックは、この
abc.com, 123, 456
abc.com, 123, 456
abc.com, 123, 456
abc.com, 123, 456
abc.com, 123, 456
abc.com, 123, 456
abc.com, 123, 456
abc.com, 123, 456
abc.com, 123, 456
abc.com, 123, 456
abc.com, 123, 456
abc.com, 123, 456
abc.com, 123, 456
abc.com, 123, 456
abc.com, 123, 456
abc.com, 123, 456
abc.com, 123, 456
abc.com, 123, 456
ですこれはコードです:
String regex = "^(([a-zA-Z0-9][a-zA-Z0-9\\-]*\\.)+([a-zA-Z]{2,})\\s*,\\s*\\d+\\s*,\\s*\\d+(\\r?\\n)?)+$";
boolean valid = Pattern.matches(regex, data); //fails here
+1この野生の野生のもので実際に遭遇する+1。 :) – Xion
ヒント1)ここで '-a-za-Z0-9 \\ - ]'(つまり:a-zA-Z-] ')が働いています。 '.matches()'を使っているときに '^'と '$'を使う必要はありません。 – NullUserException
グループが必要なのか、それとも非捕捉グループがうまくいくのでしょうか?そうであれば、エスケープされていないマイナス文字がどのように解釈されるかは、その位置によって決まるので、 '(?' '(': ''(?: '。 – Thomas