Salut,
La doc dit ceci sur ^
et $
:
A pattern is a sequence of pattern items. A '' at the beginning of a pattern anchors the match at the beginning of the subject string. A '$' at the end
of a pattern anchors the match at the end of the subject string. At other positions, '' and '$' have no special meaning and represent themselves.
En clair tu ne peux ni écrire (%s|^)
ni (%s|$)
, ça ne fonctionnera pas.
En lua, tu n’as pas non plus de parenthèses non capturantes (?:...)
, et pas non plus d’autres possibles équivalents à ^
et $
comme \a
, \A
, \z
, \Z
qu’on pourrait utiliser.
Note que (?:\s|^)
et (?:\s|$)
pourraient être remplacés par \b
suivant les cas.
En fait \b
correspond à un truc genre (?<\w)(?=\W)|(?<\W)(?=\w)
plus communément apelé limite de mot.
Peu importe, de toute façon ça n’existe pas non plus en lua.
Vu que, qoi qu’on fasse, on ne peut pas conditionner sur un ancrage au début ou à la fin, je ne pense pas que ce soit faisable avec une seule regex.
La seule alternative me parait être de découper la chaine en mots:
for word in str:gmatch('%S+') do
...
end