Java中的Regexp匹配

Java中的Regexp匹配,java,regex,Java,Regex,Java中的Regexp 我想做一个regexp谁做这个 验证一个单词是否类似于[0-9A-Za-z][.-'][0-9A-Za-z] 有效词示例 A21a_c32 daA.da2 das'2 dsada ASDA 12SA89 无效词 dsa#da2 34$ 谢谢^[0-9A-Za-z]+[.'-]?[0-9A-Za-z]+$() 要点: ^是字符串锚点的开始 $是字符串锚点的结尾 +是“一次或多次重复” ?是“零次或一次重复”(即“可选”) -在字符类定义中是特殊的(范围定义)。。。

Java中的Regexp 我想做一个regexp谁做这个 验证一个单词是否类似于[0-9A-Za-z][.-'][0-9A-Za-z] 有效词示例

A21a_c32 
daA.da2
das'2
dsada
ASDA
12SA89
无效词

dsa#da2
34$

谢谢

^[0-9A-Za-z]+[.'-]?[0-9A-Za-z]+$
()

要点:

  • ^
    是字符串锚点的开始
  • $
    是字符串锚点的结尾
  • +
    是“一次或多次重复”
  • 是“零次或一次重复”(即“可选”)
  • -
    在字符类定义中是特殊的(范围定义)。。。
    • 除非它逃走了,或者是第一次,或者是最后一次
  • 在字符类定义之外不进行scaped是特殊的。。。
    • 但在角色类定义中,它只是一个句点
工具书类
  • ,

如果
[.\u'-]
是可选的,请将
与下一个字符放在一起,如下所示:

[0-9A-Za-z]+([._'-][0-9A-Za-z]+)?

在这个解决方案中,我假设分隔符是可选的,空字符串也是合法的,并且字符串可以以分隔符开头/结尾,或者仅由分隔符组成。

是的,我理解。。。符号+它不好,就像我的例子(ASDA)中的特殊字符一样。-'可以错过顺便说一句,谢谢你的帮助answer@tinti当前位置我不理解你的评论。你是说我的模式有问题吗?如果是,那我们来修吧。和我在红宝石上来回走。给我应该/不应该匹配的输入。更正:?是“零或一”,而不是“零或多”。“零或更多”是一个很好的解释和很好的参考网站。我喜欢好的正则表达式。关于纯速度:^(?>[0-9a-z]*)([-.][a-z0-9])?(?>[a-z0-9]*)$这个(?>)东西是所有格量词替代语法。Java也将支持正常语法:^[0-9a-z]*+([-.][a-z0-9])?[a-z0-9]*+$(未测试版本)这对于小字符串来说几乎不值得,但是对于大字符串,避免过度回溯会造成巨大的差异。
"(\\p{Alnum})*([.'_-])?(\\p{Alnum})*"