在 PL/SQL Developer Find & 中使用正则表达式模式时,如何访问匹配的对象以进行替换代替?
我有一个查询,我想替换
avg(j2)
为
avg(case when j2 <> 0 then j2 else 0 end)
上面是一个具体示例,但所有替换的模式都是相同的。它始终是一个单词后跟一个数字,需要用 case 语句替换该语句来检查数字是否不为 0。
我尝试了以下 find:
avg(\(\w\d\))
并且 find 有效。现在,我想做一个替换,所以我尝试:
avg(case when \1 <> 0 then \1 else 0 end)
但它放置文字 \1 而不是从匹配中捕获的文本。我尝试了 \\1
& $1
也是如此,它按字面意思接受所有这些内容。谁能告诉我使用捕获的文本进行替换的正确语法是什么?支持吗?
I have a query where I want to replace
avg(j2)
with
avg(case when j2 <> 0 then j2 else 0 end)
The above is a specific example but the pattern is the same with all the replacements. It's always a word followed by a number that needs to be replaced with the case statement that checks if the number is not 0.
I tried the following for find:
avg(\(\w\d\))
and the find works. Now, I want to do a replace so I try:
avg(case when \1 <> 0 then \1 else 0 end)
but it puts literal \1 and not the captured text from the match. I tried \\1
& $1
as well and it takes all of them literally. Can anyone tell me what the right syntax is for using the captured text for replacement? Is this supported?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以使用 $ 和数字替换它,例如,
$0 或 $1 等。请参阅下面的示例
http://regexr .com/3gm6c
You can replace it using $ and number like,
$0 or $1 etc. see an example below
http://regexr.com/3gm6c
我不确定 PL/SQL Developer IDE 是否支持组捕获。不过,最近的版本似乎确实支持基于正则表达式的查找和替换。无法找到来源来确认群组捕获是否有效。
为什么不尝试将代码粘贴到像 Notepad++ 这样的东西中并尝试相同的正则表达式。它应该有效。您可以将结果粘贴回 IDE 并从那里继续...
I am not sure if the PL/SQL Developer IDE supports group capture. The recent versions do seem to support regex based find and replace though. Cant find a source to confirm if group capture works.
Why dont you try pasting the code in a something like Notepad++ and try the same regex. It should work. You could paste the result back to your IDE and continue from there...