正则表达式,用于捕获要在Oracle查询中使用的字符串中的别名,但不捕获与别名相同的字符

gdx19jrr  于 2022-12-03  发布在  Oracle
关注(0)|答案(1)|浏览(104)

我有一个字符串,它将用于一个oracle查询,我需要解析该字符串并将该字符串中列的别名更改为不同的值,我需要使用正则表达式来完成此操作。
下面是我将要处理的字符串类型的一个示例:

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.而不捕获(和空格字符?

3pmvbmvn

3pmvbmvn1#

您可以将模式更改为具有单个捕获组,该捕获组允许使用起始锚点、左括号或空格:

'(^|\(| )ph\.'

并在替换字符串中,将\1作为值的前缀,以便它包括匹配的任何内容。
例如:

select regexp_replace(
  '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\.',
  '\1TEST.') as result
from dual

| 结果|
| - -|
| 测试活动= 'ph.activity.1' AND((测试活动= 'ph.act.1' AND测试活动= '测试ph.act.1' AND测试活动= 'ph.test.23'))|
fiddle

相关问题