2015-09-02 206 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