Maison  >  Article  >  développement back-end  >  Conversion d'expression régulière en Glob et vice versa

Conversion d'expression régulière en Glob et vice versa

PHPz
PHPzavant
2024-02-06 11:03:15772parcourir

正则表达式到 Glob 以及反之亦然的转换

Contenu de la question

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 ?


Bonne réponse


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

caractères) ne peuvent pas être converties en modèles globaux.

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 WildcardExpression régulièreSignificationTout personnage uniqueZéro ou plusieurs caractèresTout personnage de la gammeUn personnage hors de portéeL'un des personnages donnésUne des options proposéesUne des options proposées, compte tenu des caractères génériques imbriqués
? .
* .*
[a-z] [a-z]
[!a-m] [^a-m]
[a,b,c] [abc]
{cat,dog,bat} (cat|dog|bat)
{*.tar,*.gz} (.*.tar|.*.gz)
🎜

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer