必威体育Betway必威体育官网
当前位置:首页 > IT技术

Java正则表达式--关于在线测试能够通过但是Java中无法匹配

时间:2019-09-08 22:11:05来源:IT技术作者:seo实验室小编阅读:74次「手机版」
 

java正则表达式

问题抛出

在问题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/

相关阅读

java.lang.String 类的所有方法

方法摘要 char charAt(int index)  返回指定索引处的 char 值。 int codePointAt(int index)  返回指定索引处的字符

《Java面向对象程序设计》——第一章:初次接触Java

该篇博客,主要为本人在校学习《Java面向对象程序设计》这门课程的总结与见解。有不足之处,还望斧正。(教材为《Java面向对象程序设计

java分析工具

1.监控工具VisualVM VisualVM 是Netbeans的profile子项目,已在JDK6.0 update 7 中自带(java启动时不需要特定参数,监控工具在bin/jv

android studio真机调试:java.io.IOException: 远程主

可能由于adb.exe的端口被占用了 解决: 试用adb kill-server和adb start-server 上述无法解决,执行以下cmd命令 1.netstat -ano |

Java中Lambda表达式的使用

作者:叁念 一、Lambda表达式是什么? Lambda( λ)希腊字母表的第11个字母 ,不说官方术语。在java中我们可以将其理解为将面向对象中的

分享到:

栏目导航

推荐阅读

热门阅读