繁体   English   中英

使用Postgres regexp_replace屏蔽查询字符串参数值

[英]Masking a query string param value using Postgres regexp_replace

我想用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

我想使用regexp_replace函数掩盖标题(在hollywood_genre_movieTitle\\d模式之后)

regexp_replace('(hollywood_genre_movieTitle\d+=)(.*?)(&?)', '\1XXXXXXXX\3', 'g')

这只是替换标题的第一次出现并剪切字符串。 简而言之,这种表达方式并不能满足我的要求。 我想将所有电影名称都替换为XXXXXXXX

有人可以帮我解决这个问题吗?

该正则表达式不起作用,因为(.*?)(&?)匹配空字符串,或者如果立即遵循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') 

请参阅在线演示

细节

  • (hollywood_genre_movieTitle\\d+=) -捕获组1:
    • hollywood_genre_movieTitle子字符串
    • \\d+= -1个或多个数字,后跟一个=
  • [^&]+ - &以外的1个或更多字符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM