[英]Matching '_' and '-' in java regexes
我在java中有这个正则表达式匹配字母数字字符或波浪号(〜)
^([a-z0-9])+|~$
现在我还要添加字符-
并且_
我尝试了几种组合,但两种组合都不起作用,例如:
^([a-zA-Z0-9_-])+|~$
^([a-zA-Z0-9]|-|_)+|~$
必须匹配的示例输入字符串:
woZOQNVddd
00000
ncnW0mL14-
dEowBO_Eu7
7MyG4XqFz-
A8ft-y6hDu~
任何线索/建议?
-
是方括号内的特殊字符。 它表示一个范围。 如果它不在正则表达式的任何一端,则需要通过在它之前放置\\
来进行转义。
值得指出一个捷径: \\w
相当于[0-9a-zA-Z_]
所以我认为这更具可读性:
^([\w-]+|~$
你需要转义-
,像\\-
,因为它是一个特殊字符(范围运算符)。 _
没关系。
所以^([a-z0-9_\\-])+|~$
。
编辑 :您的上一个输入字符串将不匹配,因为您使用的正则表达式匹配一串字母数字字符(加-
和_
)或波浪号(由于管道)。 但不是两个。 如果要在末尾允许可选的波形符,请更改为:
^([a-z0-9_\\-])+(~?)$
如果你把-
第一个,它不会被解释为范围指标。
^([-a-zA-Z0-9_])+|~$
这与使用以下代码的最后一个示例匹配所有示例:
String str = "A8ft-y6hDu ~";
System.out.println("Result: " + str.matches("^([-a-zA-Z0-9_])+|~$"));
最后一个示例不匹配,因为它不符合您的描述。 正则表达式将匹配字母数字, - 和_,或者〜字符的任意组合。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.