第一次使用 Postgres 風格的正則運算式,并在它的行為上遇到了困難。
Input: 'xxxaaabc'
Expected: 'xxxaaazzzbc'
邏輯:匹配M個,捕獲組,并在序列后直接添加'zzz'
嘗試:
select regexp_replace('aaabc','(?!\Sa )','zzz','i')
Result: zzzxxxaaabc
select regexp_replace('aaabc','(?!\Sa )','zzz','i')
Result: xxxazzzaabc
select select regexp_replace('xxxaaabc','(?!=a )','zzz','i')
Result: zzzxxxaaabc
這個似乎非常接近 regexp_replace('aaabc','(?!\Sa )','zzz','i'),但是 a's 的重復不起作用。
uj5u.com熱心網友回復:
請注意,該(?!\Sa )模式匹配一??個空位置,該位置沒有緊跟單個非空白字符,然后是一個或多個a字符。
該(?!=a )模式匹配字串中的一個位置,該位置不緊跟=一個或多個as。
您可以捕獲一個或多個as,然后使用對匹配項的反向參考,然后只需附加zzz:
select regexp_replace('xxxaaabc','(a )','\1zzz','i') AS Result;
請參閱DB fiddle。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/517283.html
標籤:sql正则表达式PostgreSQLpostgresql-9.6
上一篇:嘗試比較時間戳值資料
