2014-02-17 295 views
0

我使用的是正则表达式(REGEX_EXTRACT_ALL)Hadoop的猪 - 这就是Java解析 我有一个字符串:REGEXP - 如何读“字

"DYN_USER_ID=32753477; $Path=\"/\"; DYN_USER_CONFIRM=e6d2a0a7b7715cb10d1dca504e3c5e80; $Path=\"/\"" "Nokia6070/2.0 (03.20) Profile/MIDP-2.0 Configuration/CLDC-1.1" 

我expeting两组:

First: DYN_USER_ID=32753477; $Path=\"/\"; DYN_USER_CONFIRM=e6d2a0a7b7715cb10d1dca504e3c5e80; $Path=\"/\" 

Second: Nokia6070/2.0 (03.20) Profile/MIDP-2.0 Configuration/CLDC-1.1 

正如你所看到的,在第一个字符串里有“字符但是带有转义字符\”。
的simplies的解决方案是:

"(.*)" "(.*)" 

但它是最好的?

回答

1
"(.*)(?<!\\\\)" "(.*)" 

它使用negatve lookbehind(?<!☀)其中☀是一些字符串,这里的字符退格由正则表达式转义和字符串转义反斜线表示。

1

理想情况下,你应该使用否定的字符类[^"],使其从第一分隔符"到最后一个分隔符"匹配,但问题是,它忽略转义字符"。如果你能逃脱"和你的字符串逃过\,它会更好,如果你使用的是这样的:

"((?:\\.|[^"\\])+)" "((?:\\.|[^"\\])+)" 

(?:\\.|[^"\\])+将匹配一个转义字符或多个字符[^"\\]

regex101 demo