我正在使用带有regexp的hadoop pig(REGEX_EXTRACT_ALL) - 这是Java解析。 我有一个字符串:
"DYN_USER_ID=32753477; $Path=\"/\"; DYN_USER_CONFIRM=e6d2a0a7b7715cb10d1dca504e3c5e80; $Path=\"/\"" "Nokia6070/2.0 (03.20) Profile/MIDP-2.0 Configuration/CLDC-1.1"
我正在开两个小组:
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
正如你所看到的,在第一个字符串中有“character但有转义字符\。” 简化解决方案是:
"(.*)" "(.*)"
但这是最好的吗?
答案 0 :(得分:1)
"(.*)(?<!\\\\)" "(.*)"
这使用 negatve lookbehind :(?<!☀)
其中☀是一些字符串,此处字符退格由正则表达式转义和字符串转义的反斜杠表示。
答案 1 :(得分:1)
理想情况下,您应该使用否定字符类[^"]
,以便它从第一个分隔符"
到最后一个分隔符"
匹配,但问题是它忽略了转义{ {1}}字符。如果您可以在字符串中转义"
并转义"
,那么使用此类内容会更好:
\
小组"((?:\\.|[^"\\])+)" "((?:\\.|[^"\\])+)"
将匹配转义字符或多个(?:\\.|[^"\\])+
字符。