0

我有一些数据(准确地说,这些数据来自 Windows 注册表),如下所示:

some data ... PACKAGE_SIZE    REG_SZ    100000\r\n    PATH    REG_SZ    C:\\Some\\path\r\n    VERSION    REG_SZ    1.0.0\r\n some other data...

我需要从中提取路径,所以我使用这样的正则表达式:

(?<=(PATH.*?REG_SZ)).+?(?=\\r\\n)

但它不起作用,据我了解,因为环视是原子的。到目前为止,我可以使用类似的东西:

(?<=PATH).+?(?=\\r\\n)

捕捉到了什么

    REG_SZ    C:\\Some\\path

我的问题是 - 这是否可以一次性提取路径?(这意味着不使用两个正则表达式)

4

2 回答 2

1

你可以试试这个方法

String data="some data ... PACKAGE_SIZE    REG_SZ    100000\r\n    PATH    REG_SZ    C:\\Some\\path\r\n    VERSION    REG_SZ    1.0.0\r\n some other data";
Pattern p=Pattern.compile("PATH\\s+REG_SZ\\s+(.*)\\r\\n");
Matcher m=p.matcher(data);
if (m.find())
    System.out.println(m.group(1));

输出:C:\Some\path

于 2012-07-13T09:41:09.603 回答
0

试试这个

try {
    Pattern regex = Pattern.compile("(?<=PATH\\s{1,10}REG_SZ\\s{1,10})(\\S[^\r\n]+)(?=\r\n)", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
    Matcher regexMatcher = regex.matcher(subjectString);
    while (regexMatcher.find()) {
        // matched text: regexMatcher.group()
        // match start: regexMatcher.start()
        // match end: regexMatcher.end()
    } 
} catch (PatternSyntaxException ex) {
    // Syntax error in the regular expression
}

重要的:

假设 和 之间的空格数在1-10PATH之间变化。REG_SZmatched data

于 2012-07-13T09:39:17.130 回答