Oracle查询字符串中精准捕获ph.别名的正则表达式优化需求
正则表达式匹配指定位置的
ph.且不捕获前置字符 待处理字符串示例
ph.activity = ''ph.activity.1'' AND ((ph.activity = ''ph.act.1'' AND ph.activity = ''test.ph.act.1'' AND ph.activity = ''ph.test.23''))
需求说明
需要匹配并修改以下位置的ph.,其他位置的ph.不处理:
- 字符串开头的
ph. - 左括号
(之后的ph. - 空格之后的
ph.
原正则表达式(^ph\.)|( ph.)|(\(ph.)会同时捕获前置的空格或(,无法单独提取目标ph.。
修改后的正则表达式
(?<=^| |\()ph\.
正则说明
(?<=^| |\():正向肯定预查,仅匹配字符串开头、单个空格或**左括号(**之后的位置,不会将这些前置字符包含在匹配结果中ph\.:匹配目标内容ph.,其中.用反斜杠转义,避免匹配任意字符
匹配效果验证
使用该正则处理示例字符串时,会精准匹配到:
- 字符串最开头的
ph.(对应ph.activity) ((后紧跟的ph.(对应第二个ph.activity)AND后的ph.(对应第三、第四个ph.activity)
而引号内的ph.activity.1、test.ph.act.1等位置的ph.不会被匹配,符合需求。
内容的提问来源于stack exchange,提问作者user2760652
相关产品推荐
相关产品推荐

