Java RegExp问题 - .*(www).*vs.(www)

Adr*_*oKF 1 java regex

我的一个伙伴目前正在使用Java中的JpCap进行修补,我们发现了一些有关Java 中正则表达式的有趣(可能是?)问题.

仅捕获HTTP流量并随后进行分析.为此他正在使用这样的模式:

Pattern p = Pattern.compile("(www)");
Run Code Online (Sandbox Code Playgroud)

但是我们两个人都无法找到:为什么上述模式根本不会产生匹配,而以下情况如下:

Pattern p = Pattern.compile(".*(www).*");
Run Code Online (Sandbox Code Playgroud)

我可以看到,这些都应该是相同的,不是吗?我没有那么多关于正则表达式的经验,所以对这个问题可能有一个非常简单的答案:)

jjn*_*guy 7

您的第一个模式只接受字符串'www'.

第二个模式接受任何位于其中的"www"字符串.

网站提供了有关Java正则表达式的更多信息.


Adr*_*oKF 5

哦,没关系,我发现我们都有一点API盲;)

我们正在使用

Matcher.matches()
Run Code Online (Sandbox Code Playgroud)

它将模式与整个字符串相匹配,而不是

Matcher.find()
Run Code Online (Sandbox Code Playgroud)

它试图在给定字符串中的任何位置找到模式.

谢谢你的答案!:)