如何避免连字符拆分正则表达式



我正在编写一个简单的安卓应用程序,用于将您喜欢的游戏保存在列表中。

在第一个屏幕中,用户必须输入他的gamertag(作为String(。玩家代号应仅包含来自 a-z (uppercase and lowercase)numbers (0-9)underscores/hpyhens (_ and -)letters

我可以让它在每个职位或hyphen开始时与underscore一起工作。但是,如果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_-]+$

正则表达式演示

最新更新