2015-09-02 268 views
4

我想了解一些使用string patterns的內容。字符串模式,正則表達式

對於電子郵件我有

^[a-zA-Z0-9_][email protected][a-zA-Z0-9]+\\.[a-z]+ 

應該差不多,或者說做出更好? 我不想要任何複雜的,只是基本的「友好可讀」。 有什麼辦法如何通過表達式限制2-3個字符的電子郵件域?

而對於URL我已經開始用類似的東西

^(http|https)://[a-zA-Z0-9]+\\.[a-z]+(/[a-zA-Z0-9-_]+)+\\.[a-z_-]+ 

如何爲URL參數擴展行話?像:

http://hostname.domain/uriFrag1/uriFrag2/someFilename.fileExt?param1=val1&param2=val2 

任何想法如何簡單地進行模式的?param1=val1&param2=val2

可以有參數,但它們不是強制性的。

+1

也許你應該做一些教程或閱讀一本書,如果你是在這些模式如何工作很感興趣;) –

+1

順便說一句,[這](http://ex-parrot.com/~pdw /Mail-RFC822-Address.html)是正確驗證電子郵件地址的正則表達式。這很好地證明了用正則表達式驗證所有內容的無用性。 (或者,作者委婉地說:「推動與正則表達式做什麼是明智的限制。」) – biziclop

回答

3
^[a-zA-Z0-9_][email protected][a-zA-Z0-9]+\\.[a-z]+ 

有關這方面的一些事情。你應該也可以添加。甚至可能是+,因爲兩者在電子郵件中都很常見(例如Gmail允許)。其次,你可以用{from-to}限制字符的數量。所以:

^[a-zA-Z0-9_][email protected][a-zA-Z0-9]+\\.[a-z]{1,3} 

但是,您可能想考慮不這樣做,因爲更長的域名剛剛出售。人們可能會用.cloud或.email電子郵件顯示,而您不想將它們拒之門外。

至於網址:

參數1 = VAL1這可以很容易地與

(\\?[a-z]*=[a-z]*)* 

但是匹配,如果你真的想要得到他們,你可能想要使用一些捕捉組。

(\\?([a-z]*)=([a-z]*))* 
+0

Aww,當然魔法支架和星號可以用於多重播放匹配:) 這就是我在找的東西,謝謝 – xxxvodnikxxx

+0

僅供參考 - 在java模式下長度應該像這樣寫成{{1,3}':) – xxxvodnikxxx

+0

您'很正確。忘了關於java標籤。更新了帖子。 – Astrogat

0

有很多方法可以做到這一點,我找到split最簡單的方法。由於所有參數是問號後過去了,你可以簡單:

String params = url.split("\\?")[1]; 

我們強烈建議試圖訪問元素之前,檢查結果數組的邊界。

+0

當然,這是拆分URL字符串,並嘗試匹配每一個參數,但問題是如果有一些直接的方式如何通過模式:),但謝謝。 – xxxvodnikxxx