正则表达式匹配数字变量名称

时间:2015-12-18 11:05:09

标签: regex plsql regexp-replace

假设我们有以下字符串:

$6 
$7 

You have received the grade of $3 in the subject $1 ($10) in the semester $2 ($11). 
Grade date: $4 
Entered: $5 

我需要弄清楚如何动态地和可靠地替换这些变量。假设我们有以下PL/SQL伪代码:

for i in 1..X loop
  l_str := regexp_replace(l_str, '\$'||to_char(i), l_replace(i));
end loop;

但是当谈到第一次迭代时,$1$10$11变量正在被替换 - 但只有$1是正确的。

有没有人有建议如何修复它?

1 个答案:

答案 0 :(得分:1)

您的正则表达式匹配以$开头的任何内容和当前的迭代编号。 如果您需要使用相同的字符串替换所有这些变量,那么您不需要在那里进行循环,因为您可以这样做:

l_str := regexp_replace(l_str, '\$[0-9]+','SOME_STRING');

如果你需要有不同的替代品,你可以这样做:

for i in 1..X loop
  l_str := regexp_replace(l_str, '(\$'||to_char(i)||')([^0-9]+|$)',l_replace(i)||'\2');
end loop;
相关问题