正则表达式匹配用户代理中的版本号(没有应用程序的名称)



例如使用此用户代理

 Mozilla/5.0 (Linux; U; fr-fr; Desire HD Build/FRG83D) **MyApp/2.2.1** AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533

我做了这个正则表达式:

MyApp/d+(.d+)+

哪个正确匹配"MyApp/2.2.1" .我的问题是如何将此正则表达式修改为仅匹配版本号?

谢谢!

只需将与版本号之前的部分匹配的模式MyApp/放在一个积极的后视断言中。

(?<=MyApp/)d+(?:.d+)+

演示

String s = "Mozilla/5.0 (Linux; U; fr-fr; Desire HD Build/FRG83D) **MyApp/2.2.1** AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533";
Matcher m = Pattern.compile("(?<=MyApp/)\d+(?:\.\d+)+").matcher(s);
if(m.find())
{
    System.out.println(m.group());
}

输出:

2.2.1

您可以简单地将您的版本放在一个组中:

MyApp/(d+(.d+)+)

或者使用积极的回顾:

(?<=MyApp/)d+(.d+)+

最新更新