我有一些数据(确切地说,这些数据来自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
我的问题是 - 这可以一次性提取路径吗? (这意味着不使用两个正则表达式)
答案 0 :(得分: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
答案 1 :(得分: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
}
假设PATH
之间的空格数,REG_SZ
和matched data
之间的距离可以从1-10变化。