java中 a-zA-z_关于java:Regex:/ w表示[a-zA-Z]还是[a-zA-Z0-9_],因为大多数教程都提到w-匹配单词字符?...

我刚开始使用正则表达式,就是要解决这个问题,其中的任务是检查用户名是否有效。有效的用户名将具有以下属性:

用户名可以包含字母数字字符和/或

下划线(_)。

用户名必须以字母字符开头。

8 <=(用户名长度)<= 30。

我正在用这个

作为我的参考说

\w Matches the word characters.

我想出了一个像String pattern ="^\\w(\\d|\\w|_){7,29}$";这样的解决方案,它不是正确的解决方案。

经过一段时间的搜索,我发现正确的解决方案是

String pattern ="^[a-zA-Z][a-zA-Z0-9_]{7,29}$";这很容易理解。

我要确认的是(\\w|\\d|_)是否等效于[a-zA-Z0-9_]?

我认为这是因为String pattern ="^[a-zA-z](\\w|\\d|_){7,29}$";适用于所有测试用例。

另外,此stackoverflow帖子对\\w有两个不同的等效表达式,每个答案都有一个上投票,想知道哪个是正确的[A-Za-z\s]或[a-zA-Z0-9_]吗?

我不确定这是否是Stack Overflow的问题。对于了解正则表达式的人来说,\w等同于[A-Za-z0-9_]

我想是的,但是这里仍然存在与此相关的问题,他们的回答令人困惑,我相信这可以帮助像我这样的初学者。

我不知道,但是如果您觉得这是完全不合适的,那么我可以删除它吗?但是对于我来说,花了我一段时间才发现 w是[A-Za-z0-9_],而不仅仅是它通常提到的[A-Za-z],但并不是那么具体。就像这里只说" w-匹配单词字符"。

查看以下文档:docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html,其中列出了预定义的字符类。

是的,我看到我相信我应该以此为参考,但是这篇文章会引起混乱吗?

我同意这对初学者来说很混乱。该教程的功能确实含糊不清,但是您的问题针对的是特定的字符组合,并且也许强调\w的含义对于初学者来说是更好的问答方式。可以将其归结为一点,以便其他人可以快速查看此问题是否是他们要查找的内容。

感谢您的建议,我对标题进行了一些更改,还有什么我应该做的?

是的,根据此处找到的Java正则表达式构造摘要:https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html,

\d  A digit: [0-9]

\w  A word character: [a-zA-Z_0-9]

因此(\w|\d|_)等效于([a-zA-Z_0-9]|[0-9]|_),其中额外的下划线是多余的,因为它包含在\w中。

好吧,考虑了一段时间之后,尝试解决该问题的其他解决方案

实际上,\w等效于[A-Za-z0-9_]

官方文档中也有提供。

https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html

不是此答案中所述的[a-zA-Z\s]。

至于String pattern = ^[a-zA-Z]\\w{7,29};这个问题已被所有测试用例接受,对我来说,这似乎是最短的答案。

因此,尽管(\\w|\\d|_)等效于[A-Za-z0-9_],但仅使用\\w就足够了。

附:在学习阶段如有疑问,请始终坚持使用官方文档,而不是在任何地方都没有任何人的答案或教程。

希望这对有同样疑问的人有所帮助。

编辑:谢谢@ 4castle @trey的建议。

w代表"文字字符"。确切匹配的字符不同

在正则表达式引擎之间。

在所有引擎中,它将包括[A-Za-z]。

在大多数情况下,也包括下划线和数字。

在某些引擎中,其他语言的文字字符也可能匹配。

找出答案的最佳方法是使用正则表达式引擎进行几次测试。编写一个测试字符串,然后通过正则表达式 w搜索以查看其匹配项。

In most, the underscore and digits are also included-能否请举一个例子说明这种情况?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值