2013-05-01 81 views
0

的字符串這是我的正則表達式:限制正則表達式匹配只1-254字符長度

"^[^\.]([\w-\!\#\$\%\&\'\*\+\-\/\=\`\{\|\}\~\?\^]+)([\.]{0,1})([\w-\!\#\$\%\&\'\*\+\-\/\=\`\{\|\}\~\?\^]+)[^\.]@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,6}|[0-9]{1,3})(\]?)$" 

我只需匹配字符串少於255個字符。

我試過在正則表達式的開始添加單詞邊界,但它失敗:

"^(?=.{1,254})[^\.]([\w-\!\#\$\%\&\'\*\+\-\/\=\`\{\|\}\~\?\^]+)([\.]{0,1})([\w-\!\#\$\%\&\'\*\+\-\/\=\`\{\|\}\~\?\^]+)[^\.]@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,6}|[0-9]{1,3})(\]?)$" 
+0

你對字符串的定義是什麼?你是否劃定了你的琴絃?通過CR/LF字符? – dda 2013-05-01 16:02:50

+0

不帶雙引號的字符串「[email protected]」的示例。沒問題我得到答案來解決這個問題! – ElektroStudios 2013-05-01 16:23:36

回答

3

您需要在$先行,以確保它的高達254否則,前瞻匹配,即使有超過254

(?=.{1,254}$) 

另外,請記住,您可以大大簡化你的正則表達式,因爲這通常需要進行轉義字符數不需要當一個字符類(廣場布拉克凱茨)。

"[\w-\!\#\$\%\&\'\*\+\-\/\=\`\{\|\}\~\?\^]" 

是一樣的:

"[-\w!#$%&'*+/=`{|}~?^]" 

注意儀表必須先在字符類是文字短劃線和插入符號不能成爲第一。

與其他一些簡化,這裏是完整的字符串:

"^(?=.{1,254}$)[-\w!#$%&'*+/=`{|}~?^]+(\.[-\w!#$%&'*+/=`{|}~?^]+)*@((\d{1,3}\.){3}\d{1,3}|([-\w]+\.)+[a-zA-Z]{2,6})$" 

注:([^])

  • 我除去規定,即第一字符不應該是一個週期因爲無論如何下一個字符類別都不匹配,所以它是多餘的。
  • 我除去許多外來的括號
  • 我取代[0-9]與\ d
  • 我取代{0,1}與速記 「?」
  • @符號後,似乎你試圖匹配一個IP地址或文本域名,所以我分開他們更多,所以它不能組合
  • 我不知道什麼可選的方括號「(]?)」

我試過它在正則表達式英雄,它的工作原理。看看它是否適合你。

+0

謝謝你這麼多! – ElektroStudios 2013-05-01 16:17:37

+0

我已經嘗試了您的最後一個建議,但它不適合我,我複製/粘貼您的建議,並將其替換爲我的RegEx中的部分以使其縮小但匹配的字符串不再匹配,也許可以更新您使用我的正則表達式使用您的簡化建議進行修改? PS:對不起,我的英文 – ElektroStudios 2013-05-01 16:27:52

2

這取決於什麼語言你在工作。在Python例如,你可以正則表達式來分割文本爲單獨的字符串,然後用LEN()刪除不是你想要

+0

謝謝你的回答 – ElektroStudios 2013-05-01 16:22:21

1

我的255個字符的字符串長認爲this後會有所幫助。它顯示瞭如何限制某些模式,但我不知道如何將它添加到整個正則表達式中。

+0

謝謝你的回答 – ElektroStudios 2013-05-01 16:21:50