配置单元regexp_replace无法替换反斜杠

时间:2019-12-19 07:39:03

标签: regex hive special-characters backslash regexp-replace

我有一个带有单列name_string的表,其中包含反斜杠字符。我想使用regexp_replace删除反斜杠字符,但是它不起作用。

表格:

create table t (name_string varchar(100));
insert into table t values ('\\"aaa\\"'), ('\\"bbb\\"'); 

查询:

select 
   name_string, regexp_replace(name_string, '\\"', '"')
from  t; 

返回

+--------------+----------+
| name_string  |   _c1    |
+--------------+----------+
| \"aaa\"      | \"aaa\"  |
| \"bbb\"      | \"bbb\"  |
+--------------+----------+

但是,select regexp_replace('\"aaa\"', '\\"', '"')返回正确的结果。

我对为什么会这样感到困惑。有人可以说明一下吗?赞赏!

2 个答案:

答案 0 :(得分:1)

使用4个反斜杠:

select regexp_replace(name_string,'\\\\"','"') from t; 

仅反斜杠需要转义。在Java和正则表达式中,反斜杠具有特殊含义,需要转义。

答案 1 :(得分:0)

也许尝试:

select 
   name_string, regexp_replace(name_string, '\\\"', '"')
from  t; 

我认为这与转义有关-您转义了2个字符-反斜杠和双引号