我想用PostgreSQL表列中的XXXXXXXX
屏蔽电影名称。列的内容类似于
hollywood_genre_movieTitle0=The watergate&categorey=blabla&hollywood_genre_movieTitle1=Terminator&hollywood_genre_movieTitle2=Spartacus&hollywood_genre_movieTitle3=John Wayne and the Indians&categorey=blabla&hollywood_genre_movieTitle4=Start Trek&hollywood_genre_movieTitle5=ET&categorey=blabla
我想使用hollywood_genre_movieTitle\d
函数掩盖标题(在模式regexp_replace
后面)
regexp_replace('(hollywood_genre_movieTitle\d+=)(.*?)(&?)', '\1XXXXXXXX\3', 'g')
这只是替换标题的第一个出现并剪切字符串。简而言之,这种表达方式并不能满足我的要求。我想将所有电影名称都替换为XXXXXXXX
。
有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
该正则表达式不起作用,因为(.*?)(&?)
匹配一个空字符串,或者&
如果立即遵循hollywood_genre_movieTitle\d+=
模式,则进入第3组。
您需要使用否定的字符类[^&]
和+
量词来匹配&
模式之后的hollywood_genre_movieTitle\d+=
以外的任意1个或更多字符。
SELECT regexp_replace(
'hollywood_genre_movieTitle0=The watergate&categorey=blabla&hollywood_genre_movieTitle1=Terminator&hollywood_genre_movieTitle2=Spartacus&hollywood_genre_movieTitle3=John Wayne and the Indians&categorey=blabla&hollywood_genre_movieTitle4=Start Trek&hollywood_genre_movieTitle5=ET&categorey=blabla',
'(hollywood_genre_movieTitle\d+=)[^&]+',
'\1XXXXXXXX',
'g')
请参见online demo。
详细信息
(hollywood_genre_movieTitle\d+=)
-捕获组1:
hollywood_genre_movieTitle
-子字符串\d+=
-1个或多个数字,后跟一个=
[^&]+
-除&
以外的1个或多个字符。