2016-05-03 8 views
-1

こんにちは私は英数字、カンマ(、)とFullStop(。)を許可する正規表現を持っており、小さな単語(10文字のような)に対してはうまくいきます。しかし、約850文字の大きな言葉では、アプリケーションがぶら下がっています。largetextの致命的なバックトラッキング

以下は私の正規表現です。

優れたコミュニケーションスキル、現在 メンバーのLとDチームとしてインフォシスと協力し、Vとトレーニングを実施し、 新入社員のためのプロセス・研修、コールモニタリングに含まれます。いくつかの例のテキストは

/^(([a-zA-Z0-9\s]+[\s,])*\s?[a-zA-Z0-9]+){1}\.{0,1}$/ 

、ソフトスキル、電子メールのエチケット トレーニングトレーニングの必要性を特定し、アクションプランを準備します。 はトレーニングコンテンツの作成に携わっています。 コンピテンシーベースのトレーニングカレンダーは毎月、非常に彼女のアプローチと明確な願望を持って、会話と非常に良い を聞いて、チームプレーヤーと思われ、余分な イニシアチブを取ると信じて、彼女は少し高い給与をお勧めしますあなたは、この上で私を助けてもらえ非常に安定した候補者がより 5年

ので、インフォシスと協力し、全体でファーストクラスに を獲得し、 彼女appraisals.Good教育背景を通過していますか?

+0

テキスト入力をしてください。最終的には、アンカーを使用して正規表現エンジンをより早く終了させることができます。さらに、ネストされた量限定子( '+'の後に '*'が続く)は、しばしば壊滅的なバックトラックの原因です。 – Jan

+0

@Jan 1回の試行では入力できないため、2つのコメントにテキストを追加しました。 – Arat

+1

質問を編集し、それに応じてタグを変更しました。 – Jan

答えて

1

ネストされた量指定子と、同じ\sが正規表現によって多くの異なる方法で照合できるという事実は、壊滅的なバックトラッキングまでそれを開きます。また、いくつかの単純化も可能である。

次は、はるかに高速失敗:

^([a-zA-Z0-9]+[\s,]+)*[a-zA-Z0-9]+\.?$ 

これは、オプションの最終ピリオドで、空白および/またはカンマで区切られた1つの以上の英数字の単語の文を、一致しました。テスト対象として投稿したテキストは、真ん中に正規表現で許可されていない期間があるため失敗します。期間も許可したい場合は、文字クラスに追加してください:

^([a-zA-Z0-9]+[\s,.]+)*[a-zA-Z0-9]+\.?$ 
+0

私はregxを初めて使っています。ここで完全なregxを提供してください。 – Arat

+0

はそれを得ました。おかげで@ティムPietzcker – Arat