我正在尝试创建一种满足以下规则的模式
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)$))";
如果它具有值,它应该属于一个约束集
答案 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+位数字,或者online
或subl
\\.
-一个点(?:mydomain|alternatedomain)
-与mydomain
或alternatedomain
\\.com
-.com
子字符串$
-字符串的结尾。答案 1 :(得分:1)
尝试((www\\d*|online|subl)\\.)?(mydomain|alternatedomain)\\.com
您可以在线here测试正则表达式,但不要忘记用单个\\
替换\
(因为Java代码\\
表示{{1 }}(在正则表达式中)