Java 正则表达式模式-查询

Java 正则表达式模式-查询,java,regex,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

我试图找到并创建一个满足以下规则的模式

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)$))";
如果它有值,它应该属于一个限制集

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

你可以在线测试你的正则表达式,但别忘了用一个
\\
替换
\
(因为在Java代码中
\\
表示正则表达式中的
\

我建议使用

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

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

如果将regex与
.matches()
方法一起使用,则删除
^
$
,它们是多余的,因为该方法确保整个字符串与模式匹配

详细信息

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

检查一下,谢谢!!我应该早点回答的。虽然这是可行的,但我对正则表达式的初始部分有一个疑问:为什么我们需要?:在检查的第一部分。正则表达式似乎没有返回结果?:。为什么要捕获字符串的各个部分?你以后会用吗?如果没有,请使用非捕获组,
(?:…)