[英]How to avoid a hyphen from splitting a regex?
我正在编写一个简单的Android应用程序,用于将您喜爱的游戏保存在列表中。
在第一个屏幕中,用户必须输入他的gamertag
(作为String
)。 该玩家代号应该只包含letters
从az (uppercase and lowercase)
, numbers (0-9)
和underscores/hpyhens (_ and -)
我可以在每个位置使用underscore
或在开头使用hyphen
。 但是如果String
在中间包含一个hyphen
,则它会"split
”成两部分,如果hyphen
在结尾处,它就是独立的。
我想出了这个regex
:
[a-zA-Z0-9_\-]\w+
在java中它看起来有点不同,因为\\需要被转义:
[a-zA-Z0-9_\\-]\\w+
应该验证的Gamertags
:
- GamerTag
- Gamer_Tag
- _GamerTag
- GamerTag_
- -GamerTag
- Gamer-Tag
- GamerTag-
Gamertags
不应该验证:
- !GamerTag
- Gamer%Tag
- Gamer Tag
Gamertags
应该验证,但我的regex
失败:
- Gamer-Tag
- GamerTag-
您的模式[a-zA-Z0-9_\\-]\\w+
匹配字符类中的1个字符,后跟1个字符字符\\w
,它与-
不匹配。
您可以在连字符存在的位置重复1次以上的字符类,如果连字符位于字符类的末尾,则不必对其进行重复操作。
[a-zA-Z0-9_-]+
Gamer-Tag
不会分裂但有2场比赛。 字符类匹配G
, \\w+
匹配amer
。 然后在下一场比赛中,角色类匹配-
而\\w+
匹配Tag
。
如果这些是唯一允许的值,则可以使用锚点^
来断言开始,使用$
来断言字符串的结尾。
^[a-zA-Z0-9_-]+$
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.