【问题标题】:Match a String with optional number of hyphens - Java Regex匹配带有可选连字符数的字符串 - Java Regex
【发布时间】:2016-05-20 23:56:13
【问题描述】:

我正在尝试将字符串与可选数量的连字符匹配。 例如, 字符串1-字符串2, 字符串1-字符串2-字符串3, string1-string2-string3 以此类推。

现在,我有一个匹配一个连字符的东西。如何使正则表达式匹配可选的连字符数?

我当前的正则表达式是:arn:aws:iam::\d{12}:[a-zA-Z]/?[a-zA-Z]-?[a-zA -Z]*

我需要添加什么?

【问题讨论】:

    标签: regex


    【解决方案1】:

    使用这个正则表达式:

    ^\\w+(-\\w+)*$
    

    解释:

    \\w+     - match any string containing [a-zA-Z_0-9]
    (-\\w+)* - match a hyphen followed by a string zero or more times
    

    Regex101

    请注意,这不会匹配空字符串或包含奇怪字符的字符串。您可以手动处理这些情况,也可以更新正则表达式。

    【讨论】:

    • 完美的工作。我有一个后续问题。我希望最大字符数为 64。我使用了您的表达式并以这种方式添加了花括号 - (\w+(-\w+)*){1,64} 它似乎不适用于长度。是不是因为星号可以有任意数量的字符?
    • 非常感谢您的回复。我要求字符串的总长度为 64。在这种情况下,您将每个字符串限制为 64 个字符。
    • 如果你想限制字符串的长度,我会利用 Java 的字符串函数。特别是,只需使用String.length() 检查字符串的长度,并确保它至少包含一个字符且不超过 64 个字符。正则表达式并不适合所有类型的问题。
    • 这是有道理的。再次感谢!
    • 可能有一个正则表达式可以做所有事情,但它可能非常丑陋,难以维护,并且不会像检查长度那样快速运行。我很高兴能帮上忙。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-13
    • 1970-01-01
    • 2021-09-10
    相关资源
    最近更新 更多