如何用正则校验所有文本均在括号内(PostgreSQL plpgsql场景)
PostgreSQL plpgsql 整段文本括号包裹校验方案
直接用 PostgreSQL 原生的正则匹配操作符 ~ 即可实现一次校验,不需要拆分处理括号前后内容。
1. 严格模式(括号外不允许有任何字符,包括空白符)
要求整个字符串的第一个字符是左括号,最后一个字符是右括号,中间可包含任意内容:
IF word ~ '^\(.*\)$' THEN -- 符合规则:所有内容都被括号包裹,括号外无内容 ELSE -- 不符合规则 END IF;
2. 宽松模式(允许括号外仅存在空白字符)
如果业务允许括号前后有空格、换行等空白内容,只要求非空白内容全部在括号内,调整正则即可:
IF word ~ '^\s*\(.*\)\s*$' THEN -- 符合规则 ELSE -- 不符合规则 END IF;
3. 带括号闭合校验的严格模式
如果需要同时保证括号是成对闭合的(包含内部嵌套的括号场景),使用支持递归匹配的正则:
IF word ~ '^\(([^()]|(\((?1)\)))*\)$' THEN -- 不仅整体被括号包裹,内部所有括号也成对闭合 ELSE -- 不符合规则 END IF;
该方案相比原来多次调用regexp_replace、substring再计算长度的实现,代码更简洁,执行效率更高,单次正则匹配即可完成全部校验逻辑。
内容的提问来源于stack exchange,提问作者nimgwfc
相关产品推荐
相关产品推荐

