Maison > Article > développement back-end > Conversion d'expression régulière en Glob et vice versa
Nous avons l'obligation de convertir les expressions régulières en Globs pris en charge par l'interface cloud et vice versa. Avez-vous des suggestions sur la façon dont nous pouvons y parvenir et est-ce possible en premier lieu ? Plus précisément de Regex à Glob, si je comprends bien, regex est un sur-ensemble, il n'est donc peut-être pas possible de convertir toutes les Regex en Glob correspondant ?
Pour convertir à partir d'un glob, vous devez écrire un analyseur qui divise le modèle en arbres de syntaxe abstraite. Par exemple, global *-{[0-9],draft}.docx
可能会解析为 [anything(), "-", oneof([range("0", "9"), "draft"] ), ".docx"]
.
Vous parcourriez ensuite ast et généreriez l'expression régulière équivalente pour chaque nœud. Par exemple, une règle que vous pourriez utiliser à cet effet pourrait être :
anything() -> .* range(x, y) -> [x-y] oneof(x, y) -> (x|y)
Générer des expressions régulières .*-([0-9]|draft).docx
.
Ce n'est pas parfait, car vous devez également vous rappeler d'échapper à tous les caractères spéciaux ; .
是正则表达式中的特殊字符,因此您应该对其进行转义,最终生成 .*-([0-9]|draft).docx
est un caractère spécial dans une expression régulière, vous devez donc y échapper, ce qui donne
À proprement parler, les expressions régulières ne peuvent pas toutes être converties en modèles globaux. L'opération kleene stara*
(即任意数量的 a
n'existe pas dans le globbing ; les expressions régulières simples
Je ne suis pas sûr des types de globs pris en charge par Cloudfront (la documentation ne renvoie aucune correspondance pour le terme "glob"), mais voici de la documentation sur les caractères génériques de modèles de globs shell couramment pris en charge
.Voici un résumé de quelques séquences équivalentes :
Glob Wildcard | Expression régulière | Signification |
---|---|---|
?
|
.
|
Tout personnage unique |
*
|
.*
|
Zéro ou plusieurs caractères |
[a-z]
|
[a-z]
|
Tout personnage de la gamme |
[!a-m]
|
[^a-m]
|
Un personnage hors de portée |
[a,b,c]
|
[abc]
|
L'un des personnages donnés |
{cat,dog,bat}
|
(cat|dog|bat)
|
Une des options proposées |
{*.tar,*.gz}
|
(.*.tar|.*.gz)
|
Une des options proposées, compte tenu des caractères génériques imbriqués |
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!