字符串模式、正则表达式

String pattern, regular expression

我想学习一些有关使用 string patterns 的知识。

对于 电子邮件 我有

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

应该没问题,或者有什么可以改进的? 我不要任何复杂的东西,只要基本的 "friendly readable"。 有什么办法可以通过表达式限制 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 制作图案吗?

可以有参数,但不是必须的。

有很多方法可以做到这一点,我发现 split 最简单的一种。由于所有的参数都是在问号之后传递的,所以可以简单的:

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

强烈建议在尝试访问元素之前检查结果数组的边界。

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

关于这个的一些事情。您可能还应该添加 .甚至可能 +,因为两者在电子邮件中都很常见(例如 Gmail 允许两者)。其次,您可以使用 {from-to} 限制字符数。所以:

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

但是,您可能要考虑不这样做,因为更长的域名刚刚售出。人们可能会使用 .cloud 或 .email 电子邮件出现,而您不会想将他们拒之门外。

至于url:

?param1=val1 这很容易与

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

但是,如果您确实想要获取它们,您可能需要使用一些捕获组。

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