我的好友目前正在使用Java中的JpCap进行修补,我们发现了一些有关Java中正则表达式的有趣(可能是?)问题。
仅捕获HTTP流量并随后进行分析。为此他正在使用这样的模式:
Pattern p = Pattern.compile("(www)");
但是我们俩都没能找到:为什么上面的模式根本没有产生匹配,而以下是:
Pattern p = Pattern.compile(".*(www).*");
对于我所看到的,这些都应该是相同的,不是吗? 我对正则表达式没有太多经验,所以对这个问题可能有一个非常简单的答案:)
答案 0 :(得分:7)
答案 1 :(得分:5)
哦,没关系,我发现我们两个都是API盲人;)
我们正在使用
Matcher.matches()
将模式与整个字符串匹配,而不是
Matcher.find()
试图在给定字符串中的任何位置找到模式。
感谢您的回答! :)
答案 2 :(得分:1)
我假设您正在使用matches()
方法,因此在这种情况下的正则表达式应用于行。这意味着任何正则表达式都有行首和行尾字符的开头添加“引擎盖下”。
所以不是让"(www)"
获得"^(www)$"
,而是正如您所见,这显着改变了正则表达式的含义。
有关java的这种细微差别的更多信息:http://www.regular-expressions.info/java.html
答案 3 :(得分:-1)
正则表达式需要分隔符。
“符号仅用于声明字符串,因此无效作为分隔符。
你的第二个例子有分隔符,所以它有效。