2016-08-12 1 views
2

私は正規表現([A-Za-z0-9 ]*){1,60}を持っています。Javaパターンマッチングで検証するのに時間がかかります

は、私が20秒(約)後...値4503212220033000600034SS SS SS,ndklfjsldfld

にマッチした、それはので、私は私の値で使用,コンマでfalseを返します。

なぜ検証に時間がかかりますか?

+4

あなたのパターンは何をしたいですか?今度は**無限**の英数字とスペース** ** 1〜60倍**にマッチしています。あなたは「[A-Za-z0-9] {1,60}」を意味しましたか? –

+3

'matches()'のcontectで使用されている場合は[Catastrophic backtracking](http://www.regular-expressions.info/catastrophic.html)です。 –

答えて

2

catastrophical backtrackingのため、パターンに時間がかかりすぎます。 正規表現デバッガページのregex101.comにアクセスして、舞台裏で何が起こっているのかを確認してください。

あなたのパターンは、無限の英数字記号とスペースに1〜60回一致します。これは、検証の意味で論理的ではありません。

あなたは1〜60文字の英数字またはスペースで文字列に一致する必要がある場合は時々、正規表現は良いアイデアです

s.matches("[A-Za-z0-9 ]{1,60}") 
+1

ソリューションをありがとう..それは正常に動作します... – Sathish

1

を使用しています。

しかし、あなたの場合は、主に最初のスペースの前後のものに興味があるようです。

なぜ、正規表現が必要なのですか?indexOf( '')を呼び出すことができます。文字列の重要な部分を区切る文字列の位置を見つけるには?

私は正規表現の使用が間違っているとは言いません(おそらく、 "バックトラッキング"問題を修正した後、必要なものです)。しかし、あまりに多くの人が正規表現を使用しているのは、それらが存在するだけなので...

+0

彼は文字列を検証しているので、彼はそれにすべて興味があります。正規表現は間違いなくこの仕事をする最良の方法です。 –

+0

おそらく。またはそうでないかもしれません。彼は、「パターンマッチングは検証に時間がかかりすぎます。私にとっては、正確に彼が何をしようとしているのかは分かりません。 – GhostCat

関連する問題