string voyelle comment vérifier si un mot apparaît comme un mot entier dans une chaîne dans Lua




vérifier si une chaine contient un caractère java (2)

Je ne sais pas comment vérifier si un mot apparaît comme un mot entier dans une chaîne, et non comme une partie d'un mot, sensible à la casse. par exemple:

Play est en cordes

Info Playlist Play pause

mais pas dans les cordes

Info Playlist pause
Info NowPlay pause

function isWordFoundInString(w,s)
  return select(2,s:gsub('^' .. w .. '%W+','')) +
         select(2,s:gsub('%W+' .. w .. '$','')) +
         select(2,s:gsub('^' .. w .. '$','')) +
         select(2,s:gsub('%W+' .. w .. '%W+','')) > 0
end

print(isWordFoundInString('Play','Info Playlist Play pause'))
print(isWordFoundInString('Play','Info Playlist pause'))
print(isWordFoundInString('Play','Info NowPlay pause'))

Comme il n'y a pas de limite de mot \b habituelle dans Lua, vous pouvez utiliser un motif de frontière %f . %f[%a] correspond à une transition vers une lettre et %f[%A] correspond à la transition opposée.

%f[set] , un motif de frontière ; un tel élément correspond à une chaîne vide à n'importe quelle position, de sorte que le caractère suivant appartient à set et que le caractère précédent n'appartienne pas à set. L'ensemble d'ensembles est interprété comme décrit précédemment. Le début et la fin du sujet sont traités comme s'ils étaient le caractère \0 .

Vous pouvez utiliser la fonction ContainsWholeWord suivante:

function ContainsWholeWord(input, word)
    return string.find(input, "%f[%a]" .. word .. "%f[%A]")
end

print(ContainsWholeWord("Info Playlist pause","Play") ~= nil)
print(ContainsWholeWord("Info Play List pause","Play") ~= nil)

Voir la démo d'IDEONE

Pour émuler complètement le comportement \b , vous pouvez utiliser

"%f[%w_]" .. word .. "%f[^%w_]"

pattern, as \b correspond aux positions entre:

  • Avant le premier caractère de la chaîne, si le premier caractère est un mot ( [a-zA-Z0-9_] ).
  • Après le dernier caractère de la chaîne, si le dernier caractère est un mot ( [a-zA-Z0-9_] ).
  • Entre deux caractères de la chaîne, où l'un est un caractère de mot ( [a-zA-Z0-9_] ) et l'autre n'est pas un caractère de mot ( [^a-zA-Z0-9_] ).

Notez que le motif %w Lua n'est pas le même que \w car il ne correspond qu'aux lettres et aux chiffres, mais pas à un trait de soulignement.





lua-patterns