Regex pour analyser querystring valeurs pour les groupes nommés
J'ai une page HTML avec le contenu suivant:
... some text ...
<a href="file.aspx?userId=123§ion=2">link</a> ... some text ...
... some text ...
<a href="file.aspx?section=5&user=678">link</a> ... some text ...
... some text ...
Je voudrais analyser et obtenir une correspondance avec les groupes nommés:
match 1
groupe["utilisateur"]=123
groupe["rubrique"]=2
match 2
groupe["utilisateur"]=678
groupe["rubrique"]=5
Je peux le faire si les paramètres de toujours aller dans l'ordre, d'abord de l'Utilisateur, puis l'Article, mais je ne sais pas comment le faire si l'ordre est différent.
Merci!
- Est 'utilisateur' comme 'userId'?
Vous devez vous connecter pour publier un commentaire.
Dans mon cas, j'ai eu à analyser une Url, car l'utilitaire HttpUtility.ParseQueryString n'est pas disponible dans WP7. Donc, j'ai créé une méthode d'extension comme ceci:
Ensuite, Il est question de l'utilisation, par exemple
REMARQUE: je retourne à l'interface IEnumerable au lieu de le dictionnaire directement juste parce que je suis en supposant qu'il pourrait être dupliqué nom du paramètre. Si il y a des noms dupliqués, puis le dictionnaire lèvera une exception.
[\?&](?<name>[^&=]+)=(?<value>[^&=]+)
ou avec une légère modification, juste pour querystrings:[^&](?<name>[^=]+)=(?<value>[^&=]*)
Pourquoi utiliser des regex pour le scinder en sortir?
Vous pourriez d'abord extrct la chaîne de requête. Diviser le résultat sur & puis la création d'une carte en divisant le résultat que de la =
Vous ne précisez pas quelle est la langue dans laquelle vous travaillez, mais cela devrait faire l'affaire en C#:
En utilisant les regex pour d'abord trouver les paires clé-valeur et ensuite de faire des splits... ne semblent pas droit.
Je suis intéressé par une regex complète de la solution.
Quelqu'un?
Vérifier cela
Vous pouvez obtenir des paires avec quelque chose comme les Groupes["clé"].Capture[i] & Groupes["valeur"].Capture[i]
Peut-être quelque chose comme ça (je suis rouillé sur les regex, et n'était pas bon à eux, en premier lieu, de toute façon. Non testé):
(En passant, le XHTML est mal formé; & devrait & dans les attributs.)
Une autre approche est de mettre à la capture des groupes à l'intérieur lookaheads:
Si il y a seulement deux paramètres, il n'y a aucune raison de préférer cette façon au cours de l'alternance des approches fondées sur suggérée par Mike et strager. Mais si vous avez besoin de faire correspondre trois paramètres, les autres regexes serait pousser à plusieurs fois leur longueur, tandis que celui-ci aurait seulement besoin d'anticipation comme juste comme les deux existants.
Par la façon dont, contrairement à votre réponse au père Noël, il importe tout à fait un peu la langue dans laquelle vous travaillez. Il y a une grande variation dans les capacités, de la syntaxe, et de l'API à partir d'une langue à l'autre.
Vous n'avez pas dit qui regex saveur que vous utilisez. Depuis votre exemple d'URL des liens vers un .fichier aspx, je vais assumer .NET. Dans .NET, une seule regex peut avoir de multiples nommé capturer les groupes avec le même nom, et .NET va les traiter comme s'ils étaient un groupe. Ainsi, vous pouvez utiliser les regex
Cette simple regex avec l'alternance sera beaucoup plus efficace que tout les trucs avec lookaround. Vous pouvez facilement étendre si vos besoins sont correspondre les paramètres uniquement si elles sont dans un lien.
un simple python de mise en œuvre de surmonter le problème de la commande