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