繁体   English   中英

在java正则表达式中匹配'_'和' - '

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM