正则表达式模式-查询

时间:2018-12-18 14:39:01

标签: java regex

我正在尝试创建一种满足以下规则的模式

mydomain.com
www.mydomain.com
www.alternatedomain.com
www100.mydomain.com
online.mydomain.com
subl.mydomain.com

到目前为止,我创建的模式不起作用。

我在mydomain之前可能有也可能没有值。

private static final String MY_PATTERN =
 "((www*|online|subl)*\\.((mydomain|alternatedomain)\\.(com)$))";

如果它具有值,它应该属于一个约束集

2 个答案:

答案 0 :(得分:2)

我建议使用

String rx = "^(?:(?:www\\d*|online|subl)*\\.)?(?:mydomain|alternatedomain)\\.com$";

请参见regex demo

我删除了模式中的所有捕获组或将其转换为non-capturing groups。如果以后要使用字符串的那些部分,请还原它们。

如果您使用带有.matches()方法的正则表达式删除^$,则它们是多余的,因为该方法可确保整个字符串与模式匹配。

详细信息

  • ^-字符串的开头
  • (?:(?:www\\d*|online|subl)*\\.)?-可选的非捕获组匹配
    • (?:www\\d*|online|subl)*-www和0+位数字,或者onlinesubl
    • \\.-一个点
  • (?:mydomain|alternatedomain)-与mydomainalternatedomain
  • 匹配的非捕获组
  • \\.com-.com子字符串
  • $-字符串的结尾。

答案 1 :(得分:1)

尝试((www\\d*|online|subl)\\.)?(mydomain|alternatedomain)\\.com

您可以在线here测试正则表达式,但不要忘记用单个\\替换\(因为Java代码\\表示{{1 }}(在正则表达式中)