【问题标题】:Regex matching numerical variable names正则表达式匹配数字变量名称
【发布时间】:2016-03-25 01:52:16
【问题描述】:

假设我们有以下字符串:

$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 是正确的。

有没有人建议如何解决它?

【问题讨论】:

  • 试试l_str := regexp_replace(l_str, '\$[0-9]+\b','SOME_STRING');
  • 它不是静态替换,我已经改变了例子,很抱歉让您感到困惑

标签: regex plsql regexp-replace


【解决方案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;

【讨论】:

  • 其实应该按照:link工作,但是输出不变。我发现“Oracle11g 还不支持正则表达式的前瞻”。 - 也许这就是问题所在?
  • 哦,那么对不起。但是你需要用不同的字符串替换vars,而不是同一个字符串吗?
  • 可以,比如$1是学生的名字,$5应该换成日期
  • 试试这个。我更新了答案。我们的想法是找到一个 var 和其余的非数字,然后代替放置你的字符串和其余的
猜你喜欢
  • 2018-08-12
  • 2013-01-28
  • 2016-01-22
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 2015-07-06
  • 1970-01-01
  • 2016-10-22
相关资源
最近更新 更多