Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正则表达式不匹配简单大小写_Java_Regex - Fatal编程技术网

Java 正则表达式不匹配简单大小写

Java 正则表达式不匹配简单大小写,java,regex,Java,Regex,我现在拥有的。。。 ^(([A-Za-z])+([A-Za-z0-9\-])*([A-Za-z0-9])+)*\)+$ 规则: 第一个字符必须是“.”或[a-zA-Z](如果字符串长度为1,则只能是“.”) 它必须以“.”结尾 在任何“.”之前只能有[a-zA-Z0-9] 除a-zA-Z0-9和。可以有-(连字符)是唯一的Other字符集值 在任何“.”之后不能有“-” 应匹配的示例: a. a-9. abc. abc.a-c.abc. 这不应该匹配: -. -a. a-。 a abc.-bc

我现在拥有的。。。
^(([A-Za-z])+([A-Za-z0-9\-])*([A-Za-z0-9])+)*\)+$

规则:

  • 第一个字符必须是“.”或[a-zA-Z](如果字符串长度为1,则只能是“.”)
  • 它必须以“.”结尾
  • 在任何“.”之前只能有[a-zA-Z0-9]
  • 除a-zA-Z0-9和。可以有-(连字符)是唯一的Other字符集值
  • 在任何“.”之后不能有“-”
  • 应匹配的示例:
    a.
    a-9.
    abc.
    abc.a-c.abc.

    这不应该匹配:
    -.
    -a.
    a-。
    a
    abc.-bc
    ab-.abc
    abc.a-@c


    目前它与
    a.
    不匹配,这是最简单的情况之一。您对如何修复它有什么建议吗?

    从左到右:

    ^
    -开始播放,目前为止效果良好

    ([A-Za-z])+([A-Za-z0-9\-])*([A-Za-z0-9])+
    ——换句话说,尽可能多次尝试匹配
    ([A-Za-z])+([A-Za-z0-9\-])*([A-Za-z0-9])+
    ;0也是可以接受的

    让我们试着匹配一下:

    ([A-Za-z])+
    -好的,这将匹配
    A

    /^(?!\-)([A-Z0-9]|[\-\.](?!\.))*\.$/i
    
    ([A-Za-z0-9\-])*
    -不匹配

    ([a-zA-Z0-9])+
    -此处匹配失败。这与

    因此,它甚至一次都不匹配,我们在那个巨大的斑点之后快速前进,在*之后,到达:

    \。
    -这不匹配;我们在
    a

    /^(?!\-)([A-Z0-9]|[\-\.](?!\.))*\.$/i
    
    这也将处理
    --
    案例。
    试试看

    让我们把它分解一下:

    /
    ^              Line start
    (?!\-)         Must not start with -
    (              Start of matching group
      [A-Z0-9]     Match list
      |            OR
      [-.](?![-.]) A - or . not followed by - or .
    )*             End group matching 0 or more times
    \.             Must end in . 
    $              Line end
    /i             Treat as case insensitive
    

    作为一种没有lookarounds的替代解决方案,您可以通过匹配a-zA-Z来启动字符串

    然后使用一个可选模式,该模式匹配字符类的零次或多次重复(包括连字符),并以不带连字符的匹配结束,以防止重复出现在点之前或字符串末尾

    启用不区分大小写:

    ^(?:[a-z](?:[a-z0-9-]*[a-z0-9])?(?:\.[a-z0-9-]*[a-z0-9])*)?\.$
    
    部分地

    • ^
      字符串的开头
    • (?:
      非捕获组
      • [a-z]
        匹配单个字符a-z
      • (?:
        非捕获组
        • [a-z0-9-]*
          匹配任何a-z0-9的0+倍-
        • [a-z0-9]
          以a-z-9结尾,这样在
      • )?
        关闭组并将其设置为可选
      • (?:
        非捕获组
        • \.[a-z0-9-]*
          匹配a
          和0+次a-z0-9-
        • [a-z0-9]
          以a-z-9结尾,这样在
      • )*
        关闭组并重复0多次
    • )?
      关闭组,并将其设置为允许单个点的可选选项
    • \。
      匹配单个点
    • $
      字符串结尾

    如果要匹配允许的唯一值是a-zA-Z0-9句点和句点,那么什么意思是“可以有-(连字符)这是唯一的Other字符集值”@RokoC.Buljanhyphens@RokoC.Buljan参见规则3我看不到规则1得到实施。@SwimMaster参见规则3-规则1除外您对如何修复它有什么建议吗?我不知道我该怎么做“如果它的长度为1,那么就这样做如果它的长度为2,那么就这样做如果它的任何其他东西都这样做”嗯,这似乎是一个很长的解释性评论,放在答案中,这本质上不是一个答案:)它准确地解释了SwimMaster的尝试哪里出了问题。还有一条规则,就是不要只给别人布置家庭作业。如果,@RokoC.Buljan,您也觉得这不是一个合适的答案,您应该将此问题标记为不可能回答。不幸的是,它不满足条件3,例如,@TonyR
    a-。
    不应该匹配,它列在问题中不应该匹配的
    处: