2016-05-03 64 views
-1

嗨我有正則表達式允許字母數字,逗號(,)和FullStop(。)和小詞(如10個字符),它工作正常。但對於大約850個字符的大字,應用程序仍在懸掛。大文字的災難性回溯

下面是我的正則表達式。

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

一些示例文本:

優秀的溝通技巧,目前正與Infosys公司擔任 成員L和d團隊,進行脆弱性和適應性培訓,工藝培訓爲 新員工,包括呼叫監控,軟技能,電子郵件禮儀 培訓識別培訓需求並準備行動計劃,並參與編寫培訓內容 ,有經驗管理 跨職能培訓日曆每月縱向,非常 精力充沛,真誠,對事業有正確的態度,有信心在 她的方法和有明確的願望,對話和很好在 傾聽,似乎是一個團隊的球員,並相信採取額外的 舉措,建議一點點薪水,因爲她通過 她appraisals.Good教育背景去,拿下第一類 貫穿始終,非常穩定的人選,超過 5年

與Infosys的工作能否請你幫我在這?

+0

請提供一些文本輸入。最終,您可以使用錨來讓正則表達式引擎更快地結束(並失敗)。另外,嵌套的量詞(比如你的'+',後面跟一個'*')通常是災難性回溯的原因。 – Jan

+0

@Jan我在兩條評論中添加了文本,因爲它不允許一次輸入。 – Arat

+1

編輯您的問題並相應地更改標籤。 – Jan

回答

1

嵌套量詞和事實,相同的\s可以通過正則表達式以許多不同的方式匹配打開災難性的回溯。此外,一些簡化是可能的。

以下失敗快很多:

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

此的一個或多個字母數字字的語句,由空格和/或逗號分隔,具有可選的末期一致。您作爲測試主題發佈的文本失敗,因爲中間有一段時間,這是正則表達式不允許的。如果你想允許句號,只需將其添加到字符類別:

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

我是regx新手。你能否在這裏提供完整的regx? – Arat

+0

明白了。謝謝@Tim Pietzcker – Arat