【问题标题】:java.util.regex.PatternSyntaxException: Illegal repetition near index 12java.util.regex.PatternSyntaxException:索引 12 附近的非法重复
【发布时间】:2019-11-18 12:58:13
【问题描述】:

我是正则表达式的新手。我需要使用 java 验证电子邮件。我通过硬编码域名创建了用于电子邮件验证的正则表达式。但是域名应该是动态的。我已将域名作为参数传递。但我不知道如何在正则表达式中传递参数。

但是我尝试了这段代码,然后我得到了错误“java.util.regex.PatternSyntaxException: Illegal repeat near index 12”。我遵循了一些答案,但这对我没有帮助。从这些答案中,我了解了重复量词。你能告诉我我在这里缺少什么以及如何解决这个问题吗?

public static boolean validateEmail(String email, String domainName) {
      pattern = Pattern.compile("^([\\w-\\.]+)@ {"+ domainName +"}" , Pattern.CASE_INSENSITIVE);
    matcher = pattern.matcher(email);
    return matcher.matches();
  }



【问题讨论】:

  • 您可以使用另一个问题的解决方案:stackoverflow.com/questions/40162591/…
  • 最好的方法可能是首先验证您有一个语法正确的电子邮件地址(这很难正确,尤其是使用正则表达式),然后检查它是否以 @domainName 结尾。
  • @Didier L,我已经通过硬编码域名如```^([\\w-\\.]+)@(example.com | example.uk | example.co .in | example.edu.in)$。由于我是 regEx 的新手,我不知道如何在 regEx 中传递参数。现在我学习并修复了。
  • 感谢 Didier L 和 @Madina Saidova 的帮助。

标签: java regex email-validation


【解决方案1】:

{} 在正则表达式中具有含义,即指定字符重复的频率。例如。 a{5} 匹配 aaaaa

如果你想在正则表达式中使用花括号,你应该像 \\{\\} 一样转义它们。

但这不是您将 this 作为参数传递的必要条件——此时它只是文字文本。如果您只想匹配该文字域,您可以使用Pattern.compile("^([\\w-\\.]+)@" + domainName, Pattern.CASE_INSENSITIVE)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多