gpt4 book ai didi

java - 使用 Java Regex 限制连续字符

转载 作者:搜寻专家 更新时间:2023-11-01 02:39:10 25 4
gpt4 key购买 nike

我需要允许字母数字字符,"?","", "/""-" 在给定的字符串中。但我只需要限制连续的 -

例如:

  1. www.google.com/flights-usa 应该有效

  2. www.google.com/flights--usa 应该无效

目前我正在使用 ^[a-zA-Z0-9\\/\\.\\?\\_\\-]+$

请建议我如何限制连续的-

最佳答案

您可以使用带量词的分组:

^[a-zA-Z0-9/.?_]+(?:-[a-zA-Z0-9/.?_]+)*$

参见 regex demo

详细信息:

  • ^ - 字符串的开始
  • [a-zA-Z0-9/.?_]+ - 字符类中定义的集合中的 1 个或多个字符(可以替换为 [\w/. ?]+)
  • (?:-[a-zA-Z0-9/.?_]+)* - 零个或多个序列 ((?:...)*) 的:
    • - - 连字符
    • [a-zA-Z0-9/.?_]+ - 见上文
  • $ - 字符串结尾。

或者使用否定的前瞻:

^(?!.*--)[a-zA-Z0-9/.?_-]+$
^^^^^^^^^

参见 demo here

详细信息:

  • ^ - 字符串的开始
  • (?!.*--) - 一旦正则表达式引擎在任何 0+ 个字符之后找到 -- 子字符串,匹配就会失败的否定前瞻一个换行符
  • [a-zA-Z0-9/.?_-]+ - 字符类中定义的集合中的 1 个或多个字符
  • $ - 字符串结尾。

注意 [a-zA-Z0-9_] = \w 如果您不使用 Pattern.UNICODE_CHARACTER_CLASS 标志。所以,第一个看起来像 "^[\\w/.?]+(?:-[\\w/.?]+)*$" 而第二个像 "^(?!.*--)[\\w/.?-]+$"

关于java - 使用 Java Regex 限制连续字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38533551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com