问题描述:
假设有一个网站链接 http://xx.com ,通过 http 字符串来做正则搜索,代码如下:
public static void main(String[] args) {
String pattern = "http";
String urlString = "http://xx.com";
System.out.println(Pattern.matches(pattern, urlString));
}
上面代码很简单就是 Pattern.matches(pattern, urlString) 判断是否匹配到了,匹配到了返回True,否则返回False。
很明显,http://xx.com 中包含 http,所以结果应返回 True,但是结果却是False:
代码很简单,就是类似于通过java正则表达式判断,在abcd里面查找是否有ab。结果却说没找到,什么情况?
Notepad++中我们也可以通过上面的正则表达式来搜索:
或者换一种编程语言,Python正则比较:
import re
print(re.match('http', 'http://xx.com'))
都能正确匹配,所以正则表达式没问题,有问题的是java语言。
那么在其他语言中并没有错误,而java出问题了。原因是什么呢?该如何进行正则匹配呢?
我把正则表达式改为上面截图中标注的即可返回 True,当然这个正则表达式在其他语言也同样返回True。 .* 在正则表达式中表示任意多个字符。
所以问题是什么呢?
java的正则表达式并非标准的正则匹配,Pattern.matches(pattern, urlString) 这个matches()函数只有在patern完全匹配整个字符urlString 的时候才返回True。
在 java 正则表达式使用时候,多做单元测试。各种编程语言都有奇葩问题。
博客地址:http://blog.yoqi.me/?p=17269
这篇文章还没有评论