【问题标题】:Regex to match a string if it matches only one group in Java正则表达式匹配一个字符串,如果它只匹配 Java 中的一个组
【发布时间】:2019-09-10 22:14:03
【问题描述】:

我想知道,有没有可以帮助匹配的正则表达式 文本,只有当被测试的字符串只属于被测试的组之一?

假设我有这两组:

第一组:[a-zA-Z]

第 2 组:[0-9]

那么是否有适用的正则表达式,仅匹配以下字符串:abc, 或者只有这个:123

但是当有一个字符串代表两个组的组合时,不会匹配任何东西,例如:123abc2b?

P.S:我正在使用 Java。

【问题讨论】:

  • String#matches 并使用^...$ 来划定String 的边界
  • 能否提供一个具体的使用示例?

标签: java regex regex-negation regex-group


【解决方案1】:

交替是解决问题的关键。使用模式^(?:\d*|[a-zA-Z]*)$

解释:

^ - 字符串的开头

(?:...) - 非捕获组

\d*- 匹配零个或多个数字

| - 交替

[a-zA-Z]* - 匹配零个或多个字母(小写或大写)

$ - 匹配字符串的结尾

Demo

【讨论】:

  • @MichałTurczyn 你的答案是正确的,因为 Haim 是正则表达式的新手,并且与他的思维模式保持一致。通过添加 + 来检查第一组 [a-zA-Z] 的多个实例,或者通过添加 + 来检查第二组 [0-9] 的多个实例。 or 用管道表示,结果为 ([a-zA-Z]+)|([0-9]+)。这将在Java中工作。但是这里的答案更完整。
  • @HaimLvov 查看此页面以获取更多信息。 javatpoint.com/java-regex
【解决方案2】:

根据您的描述,我认为您只需要|,这在正则表达式中表示“或”。匹配[a-zA-Z] [0-9],但不能同时匹配两者。

例如

^(?:[a-zA-Z]+|[0-9]+)$

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    • 2015-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多