如何将正则表达式常量作为参数传递给函数?

如何将正则表达式常量作为参数传递给函数?

来自 gawk 手册

由于某些内置函数(例如matchsplitsub)接受 regexp 常量作为参数,因此在尝试使用 regexp 常量作为用户定义函数的参数时可能会出现混乱。例如:

function mysub(pat, repl, str, global)
{
if (global)
gsub(pat, repl, str)
else
sub(pat, repl, str)
return str
}
{
...
text = "hi! hi yourself!"
mysub(/hi/, "howdy", text, 1)
...
}

在此示例中,程序员希望将正则表达式常量传递给用户定义的函数mysub(),该函数又将其传递给 sub()gsub()。然而,真正发生的情况是pat ,根据是否$0匹配,为该参数分配一个值 1 或零/hi/。当 gawk 看到正则表达式常量用作用户定义函数的参数时,它会发出警告,因为以这种方式传递真值可能不是预期的。

  1. 如何将正则表达式常量作为参数传递给函数,以便该函数可以将参数作为正则表达式而不是真值接收?

    换句话说,在将正则表达式常量传递给函数之前,如何防止将其计算为字符串匹配表达式,并确保将其按原样处理?

  2. 如何将正则表达式常量作为正则表达式传递给那些内置函数(例如match, split, sub),而不将其计算为字符串匹配表达式?

谢谢。

答案1

您应该使用引号将值传递给函数变量。

mysub( "hi", "howdy", text, 1)

或者为变量使用其他名称:

thisarg = "hi"
mysub( thisarg, "howdy", text, 1)

相关内容