Maison > développement back-end > Golang > le corps du texte

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

PHPz
Libérer: 2024-02-06 11:03:15
avant
792 Les gens l'ont consulté

正则表达式到 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)
Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!