简体   繁体   English

使用Java RegEx进行数据处理

[英]Data processing Using Java RegEx

There is sorts of data like 有各种各样的数据,例如

Dalvik/1.6.0 (Linux; U; Android 4.4.4; R8207 Build/KTU84P)
Dalvik/2.1.0 (Linux; U; Android 5.1.1; A51 Build/LMY47V)
Dalvik/2.1.0 (Linux; U; Android 5.0; vivo X5Pro D Build/LRX21M)
Dalvik/1.6.0 (Linux; U; Android 4.4.4; R8207 Build/KTU84P)
Dalvik/1.6.0 (Linux; U; Android 4.4.2; TCL P331M Build/KOT49H)

I want get Android vcode like 'Android 4.4.2'. 我想获取Android vcode,例如“ Android 4.4.2”。 Regex pattern like (\\w+/(\\d.){1,2}\\d)( \\(Linux; U; )(Android (\\d.){1,2}\\d)(.*) works well. But when I wrote in Java then it doesnt work. How i write it in Java Regex Syntax. Any advice would be appreciated. Thank you! (\\w+/(\\d.){1,2}\\d)( \\(Linux; U; )(Android (\\d.){1,2}\\d)(.*)这样的正则表达式模式效果很好。但是,当我用Java编写时,它不起作用,如何用Java Regex语法编写它,任何建议都将不胜感激,谢谢!

Use the following syntax for your Java pattern, in order to find the Android + version token: 为您的Java模式使用以下语法,以查找Android + version令牌:

String[] test = {
    "Dalvik/1.6.0 (Linux; U; Android 4.4.4; R8207 Build/KTU84P)",
    "Dalvik/2.1.0 (Linux; U; Android 5.1.1; A51 Build/LMY47V)",
    "Dalvik/2.1.0 (Linux; U; Android 5.0; vivo X5Pro D Build/LRX21M)",
    "Dalvik/1.6.0 (Linux; U; Android 4.4.4; R8207 Build/KTU84P)",
    "Dalvik/1.6.0 (Linux; U; Android 4.4.2; TCL P331M Build/KOT49H)" 
};
Pattern p = Pattern.compile("Android\\s[\\d.]+");
Pattern wholeStringMatch = Pattern.compile("^.*?(Android\\s[\\d.]+).*?$");
System.out.printf("Matching only necessary pattern...%n%n");
for (String s: test) {
    Matcher m = p.matcher(s);
    if (m.find()) {
        System.out.printf("Found: %s%n", m.group());
    }
}
System.out.printf("%nWhole match...%n%n");
for (String s: test) {
    Matcher m = wholeStringMatch.matcher(s);
    if (m.find()) {
        System.out.printf("Found: %s in %s%n", m.group(1), m.group());
    }
}

Output 输出量

Matching only necessary pattern...

Found: Android 4.4.4
Found: Android 5.1.1
Found: Android 5.0
Found: Android 4.4.4
Found: Android 4.4.2

Whole match...

Found: Android 4.4.4 in Dalvik/1.6.0 (Linux; U; Android 4.4.4; R8207 Build/KTU84P)
Found: Android 5.1.1 in Dalvik/2.1.0 (Linux; U; Android 5.1.1; A51 Build/LMY47V)
Found: Android 5.0 in Dalvik/2.1.0 (Linux; U; Android 5.0; vivo X5Pro D Build/LRX21M)
Found: Android 4.4.4 in Dalvik/1.6.0 (Linux; U; Android 4.4.4; R8207 Build/KTU84P)
Found: Android 4.4.2 in Dalvik/1.6.0 (Linux; U; Android 4.4.2; TCL P331M Build/KOT49H)

Notes 笔记

  • You can replace the \\\\w+ element with just static Android since you know this is constant. 您可以使用静态Android替换\\\\w+元素,因为您知道这是恒定的。
  • Added a whole string match pattern to test against the whole string. 添加了整个字符串匹配模式以对整个字符串进行测试。 As you can see, the token you're looking for is now back-referenced to group 1 如您所见,您正在寻找的令牌现在已反向引用到组1

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM