RegexOptions.ECMAScript的疑问

橘子皮... 2018-10-10 12:35:29


Dim reg As New Regex("\b\d{6}\b")
Dim m As MatchCollection = reg.Matches("2018-10-09 16:45:52,10655158,13162152470,【俱乐部】您的验证码是772489,5分钟内有效,请确认本人操作。开铂金会员,赢苹果手机!")
If m.Count > 0 Then msgbox m(0).Value

Dim reg As New Regex("\b\d{6}\b", RegexOptions.ECMAScript)
Dim m As MatchCollection = reg.Matches("2018-10-09 16:45:52,10655158,13162152470,【俱乐部】您的验证码是772489,5分钟内有效,请确认本人操作。开铂金会员,赢苹果手机!")
If m.Count > 0 Then msgbox m(0).Value



为什么加上RegexOptions.ECMAScript后就可以提出772489,而不加就提不出????
...全文
160 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
游北亮 2018-10-10
  • 打赏
  • 举报
回复
参考:https://docs.microsoft.com/zh-cn/dotnet/standard/base-types/regular-expression-options#ECMAScript 使用 ECMAScript 时,与单词字符匹配的 \w 元素等效于 [a-zA-Z_0-9] 字符类,使用规范化行为时,该元素等效于 [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}]。
游北亮 2018-10-10
  • 打赏
  • 举报
回复
特意查了一下, 在 ECMAScript中,\w匹配 字母和数字及_ ,即 \w表示[a-zA-Z_] 而默认情况下,\w还匹配汉字。 所以ECMAScript中,汉字与数字的中间也能匹配 \b, 解释了你的问题
游北亮 2018-10-10
  • 打赏
  • 举报
回复
\b匹配一个位置,表示单词边界,单词边界一般是指\w与\W之间的位置,在你的字符串: 您的验证码是772489 “是”和“7”都是 \w,所以这2字符中间的位置不能匹配\b。 至于为啥ECMAScript可以匹配,对这个选项没有研究,不发表意见。 btw:你要匹配验证码,用这个正则不就好了: 验证码是(\d{6})

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧