【问题标题】:String pattern, regular expression字符串模式、正则表达式
【发布时间】:2015-11-28 01:36:01
【问题描述】:

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

对于电子邮件我有那个

^[a-zA-Z0-9_]+@[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 制作图案?

可以有参数,但不是强制性的。

【问题讨论】:

  • 如果你真的对这些模式的工作原理感兴趣,也许你应该做一些教程或读一本书;)
  • 顺便说一下,this 是正确验证电子邮件地址的正则表达式。这很好地证明了使用正则表达式验证所有内容是徒劳的。 (或者用作者委婉的说法:pushes the limits of what it is sensible to do with regular expressions。)

标签: java regex string expression


【解决方案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 电子邮件出现,而您不希望将它们拒之门外。

至于网址:

?param1=val1 这很容易与

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

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

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

【讨论】:

  • 哇,当然,多人比赛的魔术括号和星号 :) 这正是我想要的,谢谢
  • 仅供参考 - 在 java 中的模式长度应该这样写 {1,3} :)
  • 你说的很对。忘记了java标签。更新了帖子。
  • 以及字符串文字以转义 `\` :)
【解决方案2】:

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

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

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

【讨论】:

  • 当然是这样 - 拆分 URL 字符串并尝试匹配每个参数,但问题是是否有一些直接的方法可以通过模式 :) 但谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-09
  • 1970-01-01
  • 1970-01-01
  • 2021-09-15
  • 2015-07-03
  • 2019-11-12
  • 1970-01-01
相关资源
最近更新 更多