Java正则表达式

您所在的位置:网站首页 正则表达式生成代码是什么 Java正则表达式

Java正则表达式

2024-02-13 20:34| 来源: 网络整理| 查看: 265

问题抛出

在问题4的Problem1中的getMentionedUsers函数。其中需要去匹配@和后面的合法的用户名。从而获得某个人@了哪些用户。并且不能匹配类似邮箱中的@字符。在使用正则表达式的时候,我想到的是用@前面不能是用户名的合法字符,@的后面是1个或多个用户名的合法字符,所以一开始我写的正则表达式是 Pattern = “[^a-zA-Z0-9_-]@[a-zA-Z0-9_-]+”; 经过网页上的在线测试,可以正确识别出我们要找的字符。 这里写图片描述 但是在Java中的程序却无法正确识别:(代码和输出结果如图) 这里写图片描述 这里写图片描述

原因

在百度上找了许多关于“正则表达式在线测试能够匹配,java却无法匹配”的问题。 原因是:Java中的”\”需要经过转义,因此我们需要输入”\”来表示输入一个“\”。 这里写图片描述 这里写图片描述

解决

但是将写的正则表达式进行转义等还是无法识别。考虑到可能是全局匹配的问题。因此在正则表达式前面加上 ”.” ( .连在一起就意味着任意数量的不包含换行的字符 )。 Pattern = “.*[^a-zA-Z0-9_-]@[a-zA-Z0-9_-]+”; 经过测试成功。 这里写图片描述 我们使用下面的代码来进行多次匹配:

while(m.find()) { // 处理 String string = m.group(); } 其他发现

同时发现另外一个问题,在匹配具有多个@的时候,这时只能找到最后一个@。经过查询百度,发现匹配是有惰性匹配和贪婪匹配以及支配匹配的。为了让匹配尽量少。所以正则表达式写成: Pattern = “.*?[^a-zA-Z0-9_-]@[a-zA-Z0-9_-]+”; 至此,正确完成功能。

参考

惰性匹配和贪婪匹配以及支配匹配:http://www.jb51.net/article/62876.htm java正则表达式语法:http://www.runoob.com/java/java-regular-expressions.html 正则表达式在线测试:http://tool.oschina.net/regex/



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3