Como posso passar uma constante de expressão regular como um argumento para uma função?

0

Do manual do gawk

Because some built-in functions (e.g. match, split, sub) accept regexp constants as arguments, confusion can arise when attempting to use regexp constants as arguments to user-defined functions. For example:

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)
...
}

In this example, the programmer wants to pass a regexp constant to the user-defined function mysub(), which in turn passes it on to either sub() or gsub(). However, what really happens is that the pat parameter is assigned a value of either one or zero, depending upon whether or not $0 matches /hi/. gawk issues a warning when it sees a regexp constant used as a parameter to a user-defined function, because passing a truth value in this way is probably not what was intended.

  1. Como posso passar uma constante de expressão regular como um argumento para um função, de modo que a função pode receber o argumento como um regular expressão em vez de um valor de verdade?

    Em outras palavras, antes que uma constante de expressão regular seja passada para um função, como posso evitar que seja avaliado como uma string expressão de correspondência e garantir que ele seja tratado como o que é?

  2. Como as constantes de expressões regulares podem ser passadas para aquelas incorporadas funções (por exemplo, match , split , sub ) como expressões regulares, sem ser avaliado como uma expressão de correspondência de seqüência de caracteres?

Obrigado.

    
por Tim 19.07.2017 / 14:35

1 resposta

1

Você deve usar aspas para passar valores às variáveis de função.

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

Ou usando outro nome para uma variável:

thisarg = "hi"
mysub( thisarg, "howdy", text, 1)
    
por 19.07.2017 / 21:50

Tags