Lua motif destiné à extraire / remplacer la valeur de / /
-
30-09-2019 - |
Question
J'ai une chaîne comme hello /world today/
Je dois remplacer /world today/
avec /MY NEW STRING/
La lecture du manuel que j'ai trouvé
newString = string.match("hello /world today/","%b//")
que je peux utiliser avec gsub
pour remplacer, mais je me demandais est là aussi une façon élégante de revenir tout le texte entre le /
, je sais que je pouvais couper, mais je me demandais s'il y avait un motif.
La solution
Essayez quelque chose comme une des options suivantes:
-
slashed_text = string.match("hello /world today/", "/([^/]*)/")
-
slashed_text = string.match("hello /world today/", "/(.-)/")
-
slashed_text = string.match("hello /world today/", "/(.*)/")
Cela fonctionne parce que string.match
renvoie toutes les captures du motif ou l'ensemble du texte correspondant s'il n'y a pas de captures. La clé est alors de faire en sorte que le modèle a la bonne quantité de greediness, se rappelant que les modèles Lua ne sont pas une langue d'expression régulière complète.
Les deux premières doit correspondre aux mêmes textes. Dans le premier, je l'ai expressément exigé que le match de modèle que beaucoup de non-slash que possible. La seconde (grâce LHF) correspond à la durée la plus courte de tous les caractères dans l'ensemble, suivie d'une barre oblique. Le troisième est gourmand, il correspond à la plus longue durée de caractères qui peuvent encore être suivies d'une barre oblique.
Le %b//
dans la question initiale n'a pas d'avantages sur /.-/
puisque les deux délimiteurs sont le même caractère.
Edit:. Ajout d'un modèle suggéré par lhf, et plus d'explications