Problème de regex

a marqué ce sujet comme résolu.

Salut

J’ai besoin dans une url qui ressemble à

https://www.linkedin.com/posts/cedricaubray_la-strat%C3%A9gie-de-prix-du-pop-corn-ugcPost-6926798719199662080-RCGp?utm_source=linkedin_share&utm_medium=member_desktop_web

D’extraire le postId, et le postType (dans le cas ci dessus : ugcPost et 6926798719199662080

La regex que j’ai fais et qui me renvoie un tableau est : /(1+).$/

Sauf que selon l’url, l’index de ma donnée n’est pas la même.. il me faudrait une solution pour être sûr que l’activity ou le numéro d’id est toujours au bon index quitte à modifier la regex

Voici l’url en questions :

https://www.linkedin.com/posts/luca-fancello-%F0%9F%A7%B1–673b7652_je-viens-de-cr%C3%A9er-le-guide-complet-pour-le-activity-6905144283419045888-XLfb

(ici la clé étant activity et l’id : 6905144283419045888

+0 -0

Tu es obligé de passer par des expressions régulières ?

Parce de ce que je vois, en programmation, il suffit de nettoyer l’URL de ses paramètres, de découper selon les pointillés tirets et de prendre les 3ème et 2nd éléments en partant de la fin, ce qui est trivial.

Ça doit être faisable avec une expression régulière, mais comme on a un nombre indéterminé de tirets, je ne sais pas exactement comment garantir le résultat – en tout cas pas en conservant une expression régulière simple et compréhensible.

Commençons par le commencement : dans quel langage tu travailles ? Pour parser/nettoyer des URL et isoler les champs il y a des fonctions dans la plupart des bibliothèques standard.

Le problème, c’est que l’url peut beaucoup différé et un split ne pourra pas être suffisant

Dans ce cas il va falloir nous montrer plusieurs exemples d’URL différentes et ce que tu comptes extraire de chacune d’elles.

+1 -0

Même si tu veux utiliser des regex, pour te simplifier la vie tu peux déjà parser l’URL et extraire le path pour travailler sur quelque chose comme /posts/[slug] (sans les query strings, le protocole, le nom de domaine). C’est souvent inclus de base dans la lib standard des langages usuels.

Sinon, est-ce que tu aurais un moyen d’obtenir plutôt les URL d’embed qui sont dans un format déjà machine-friendly ? Par exemple : https://www.linkedin.com/embed/feed/update/urn:li:ugcPost:6926798719199662080. Celles-ci me paraissent triviales à parser et ont l’air de présenter un format stable.

+2 -0

Une regex qui a l’air de fonctionner pour les cas que tu présentes, en partant du principe que ton postId et on postType sont bien en avant-dernière et avant-avant-dernière position dans l’URL et que ton URL reste globalement de la forme que tu proposes :

(\w+)-(\d+)-\w+(?:$|\?)

le groupe non capturant (?:$|\?) permet de repérer soit la fin de l’URL, soit le début des paramètres de l’URL. En partant de là, on remonte simplement en éliminant le groupe de lettres à la fin, puis on peut récupérer notre id et type, que j’ai considérés ici comme simplement numérique pour l’ID et alphanumérique pour le type, le tout séparé par des tirets

Cela dit, comme soulignés par plusieurs de mes voisins du dessus, il est probablement pertinent de commencer par nettoyer l’URL, pour ne récupérer que la partie signifiante dans ton cas (entre le nom de domaine et les paramètres) pour ensuite travailler directement dessus, ce qui évitera des erreurs dans le cas où l’URL ne serait pas formée exactement comme les cas que tu présentes (et il y a toujours un cas particulier que tu auras oublié !)

Ce qui t’intéresse ici est la partie chemin de l’URL. Tu peux utiliser ta bibliothèque standard pour extraire la bonne partie.

Ensuite, tu peux split ou utiliser une regex. Je recommande de split sur - et de garder les trois derniers éléments tout simplement.

Après c’est pas très résistant mais une regex du style /\d{8,}/ (au moins 8 chiffres) devrait marché non ? Donc ceci devrait être Ok : /(\w+)-(\d{8,})/.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte