2014-02-17 296 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