#1 Le 28/09/2019, à 17:37
- abecidofugy
Expressions régulières
Salut,
Je cherche à introduire dans un logiciel une expression régulière pour :
— englober toutes les urls d’un nom de domaine, c’est-à-dire les url commençant par : www.mondomaine.fr/
— n’importe quel chaîne de caractères
Merci de votre aide.
KDE neon pour le plaisir d’avoir un O/S moderne et puissant et Firefox Nightly comme navigateur. Aussi sous Windows 11 pour une partie de mon travail…
Hors ligne
#2 Le 28/09/2019, à 17:56
- jamesbad000
Re : Expressions régulières
Bonjour,
^www.mondomaine.fr/.*
Edit pour être plus précis il faudrait mettre une séquence d'échappement sur les points (autrement ils pourront être remplacés par n'importe quel caractère
^www\.mondomaine\.fr/.*
Hum et j'ai supposé que les URL étaient en début de ligne. Autrement il faut enlever le ^ au début
Dernière modification par jamesbad000 (Le 28/09/2019, à 18:02)
L'espace et le temps sont les modes par lesquels nous pensons, et non les conditions dans lesquelles nous vivons. (Signé Albert)
Hors ligne
#3 Le 28/09/2019, à 18:01
- kamaris
Re : Expressions régulières
L'expression régulière
www\.mondomaine\.fr/
matchera toutes les chaines de caractères contenant « www.mondomaine.fr/ » : ça devrait te convenir, étant donné la forme particulière que prennent les urls.
Au sens où une url contenant cette expression devrait nécessairement « commencer » par elle, si on exclut le protocole par lequel elle devrait réellement commencer.
Pour la seconde question, c'est simplement
.*
pour toute chaine, y compris la chaine vide.
Dernière modification par kamaris (Le 28/09/2019, à 18:02)
Hors ligne
#4 Le 28/09/2019, à 18:07
- abecidofugy
Re : Expressions régulières
Super, merci à vous. Je vais tester ça de ce pas. Bonne soirée
KDE neon pour le plaisir d’avoir un O/S moderne et puissant et Firefox Nightly comme navigateur. Aussi sous Windows 11 pour une partie de mon travail…
Hors ligne
#5 Le 28/09/2019, à 19:56
- abecidofugy
Re : Expressions régulières
Re,
En fait, je voudrais éliminer les URL externes. Je voudrais donc écarter les URL ayant le motif http ou https.
Ça donnerait quoi pour avoir toutes les urls sans ces motifs ?
Un grand merci.
Dernière modification par abecidofugy (Le 28/09/2019, à 20:03)
KDE neon pour le plaisir d’avoir un O/S moderne et puissant et Firefox Nightly comme navigateur. Aussi sous Windows 11 pour une partie de mon travail…
Hors ligne
#6 Le 28/09/2019, à 20:24
- jamesbad000
Re : Expressions régulières
SI tu utilise grep le plus simple est d'utiliser la négation (et tant qu'à faire j'ajoute aussi le -i pour rendre insensible au minuscules/majuscule)
grep -E --invert-match -i https?
ou
grep -E --invert-match -i (http|https)
Dernière modification par jamesbad000 (Le 28/09/2019, à 20:33)
L'espace et le temps sont les modes par lesquels nous pensons, et non les conditions dans lesquelles nous vivons. (Signé Albert)
Hors ligne
#7 Le 28/09/2019, à 20:31
- pingouinux
Re : Expressions régulières
Bonsoir,
Ce serait plus facile si tu donnais un petite exemple avec quelques lignes, contenant à la fois des URL que tu gardes et d'autres que tu élimines.
Hors ligne
#8 Le 29/09/2019, à 00:52
- abecidofugy
Re : Expressions régulières
@pingouinux
On garde :
<a href="/monchemineninterne/url">mon ancre</a>
On rejette :
<a href="https://www.facebook.com/entreprise/" rel="nofollow" target="_blank">Image Facebook</a>
<a href="http://www.blabla.com/entreprise/">bli bli</a>
Je ne peux pas utiliser egrep, car dans mon logiciel je n’ai qu’une case avec une valeur de regex comme réponse attendue pour le sélecteur href :
Dernière modification par abecidofugy (Le 29/09/2019, à 01:11)
KDE neon pour le plaisir d’avoir un O/S moderne et puissant et Firefox Nightly comme navigateur. Aussi sous Windows 11 pour une partie de mon travail…
Hors ligne
#9 Le 29/09/2019, à 05:55
- pingouinux
Re : Expressions régulières
Si tu veux récupérer les lignes complètes :
grep 'href="/' fichier
et pour ne récupérer que les URL
grep -Po '(?<=href=")/[^"]+(?=")' fichier
Hors ligne
#10 Le 29/09/2019, à 08:18
- gigiair
Re : Expressions régulières
Je ne trouve pas ta question très clairement posée. `/monchemineninterne' est une constante ou non ?
Tu peux essayer de construire ta regexp en utilisant le site Regex Testing
Il y a une liste de regexp proposée pour diverses situations. J'ai utilisé la forme `Match elements of a url' en virant ce qui concerne http ou ftp.
\/?([^:\/\s]+)((\/\w+)*\/)([\w\-\.]+[^#?\s]+)(.*)?(#[\w\-]+)?$
Tu peux vérifier son efficacité en tapant dans le cadre d'édition des exemples de ce que tu veux voir reconnaître.
En plaçant le curseur au dessus des expressions composant la regexp, tu peux savoir la fonction de cette expression,
et s'il y a une erreur (souligné en rouge) sa cause.
Il y a plusieurs syntaxes pour les expressions régulières Le site que je t'indiques propose Perl ou javascript. Il y en a d'autres...
Il existe sans doute d'autres sites pour aider à composer des regexps, et certains éditeurs ont une fonction semblable (Emacs par exemple).
Dernière modification par gigiair (Le 29/09/2019, à 08:45)
--
JJR.
Hors ligne
#11 Le 29/09/2019, à 09:35
- abecidofugy
Re : Expressions régulières
Oops, je me corrige. Désolé. Je reprends :
@gigiair : non, ce n’est pas une constante. En rerésumant, les liens internes au site n’ont pas une url complète (c’est-à-dire qu’elles ne sont pas de la forme https ou http et commencent toutes par un slash, mais sans ancre nommée en début d’URL) et pour les URL externes, elles ont soit http ou https dans leur syntaxe soit sont de la forme :
<a class="a2a_button_facebook" target="_blank" href="/#facebook" rel="nofollow noopener"><span class="a2a_svg a2a_s__default a2a_s_facebook" style="background-color: rgb(59, 89, 152);"><svg focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path fill="#FFF" d="M17.78 27.5V17.008h3.522l.527-4.09h-4.05v-2.61c0-1.182.33-1.99 2.023-1.99h2.166V4.66c-.375-.05-1.66-.16-3.155-.16-3.123 0-5.26 1.905-5.26 5.405v3.016h-3.53v4.09h3.53V27.5h4.223z"></path></svg></span><span class="a2a_label">Facebook</span></a>
/#facebook <------------------------- il y l’ancre nommée avec un # en début d’url, juste après le / : je ne veux pas de ces URL non plus.
Moi je ne veux récupérer que les URL internes à mon site.
Si on se concentre que sur la partie href, voilà ce qu’on peut dire.
Je ne veux récupérer que les URL partielles commençant par un / puis des lettres ou des chiffres (pourquoi pas) mais pas de # juste après le slash.
Bref, une URL interne bonne : <a class="lire" href="/services/imprimerie-en-ligne-alsace/conception-impression-carte-visite">l’intérêt d’avoir des cartes de visite </a>
Et une URL externe qu’on ne veut pas :
<a class="a2a_button_facebook" target="_blank" href="/#facebook" rel="nofollow noopener"><span class="a2a_svg a2a_s__default a2a_s_facebook" style="background-color: rgb(59, 89, 152);"><svg focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path fill="#FFF" d="M17.78 27.5V17.008h3.522l.527-4.09h-4.05v-2.61c0-1.182.33-1.99 2.023-1.99h2.166V4.66c-.375-.05-1.66-.16-3.155-.16-3.123 0-5.26 1.905-5.26 5.405v3.016h-3.53v4.09h3.53V27.5h4.223z"></path></svg></span><span class="a2a_label">Facebook</span></a>
Autre URL qu’on ne veut pas :
<a class="lienssociaux" href="https://www.facebook.com/publicitem/" rel="nofollow" target="_blank"><img alt="Logotype Facebook" class="imgbadge" src="/sites/publicitem.pro/files/facebook.png" width="64" height="64"></a>
(excusez-moi je n’ai pas été clair, je ne suis pas très réveillé)
Dernière modification par abecidofugy (Le 29/09/2019, à 10:02)
KDE neon pour le plaisir d’avoir un O/S moderne et puissant et Firefox Nightly comme navigateur. Aussi sous Windows 11 pour une partie de mon travail…
Hors ligne
#12 Le 29/09/2019, à 10:12
- abecidofugy
Re : Expressions régulières
L’expression régulière qu’il me faudrait, en fait, ça serait :
— garder dans tous les liens de la page les URL commençant par un slah suivi tout de suite de lettres et/ou de chiffres
KDE neon pour le plaisir d’avoir un O/S moderne et puissant et Firefox Nightly comme navigateur. Aussi sous Windows 11 pour une partie de mon travail…
Hors ligne
#13 Le 29/09/2019, à 11:19
- pingouinux
Re : Expressions régulières
Avec les nouvelles contraintes en #11, je propose ceci ::
Si tu veux récupérer les lignes complètes :
grep 'href="/[^#]' fichier
et pour ne récupérer que les URL
grep -Po '(?<=href=")/[^#"]*(?=")' fichier
Édité : Petite correction
Dernière modification par pingouinux (Le 29/09/2019, à 11:49)
Hors ligne
#14 Le 29/09/2019, à 11:35
- abecidofugy
Re : Expressions régulières
@pingouinux : ça ne marche pas
Je n’utilise pas grep, mais le tableau du logiciel, voir image :
C’est bien ça la syntaxe ?
Avec ta proposition, ça me prend tout de même les liens sociaux, donc avec un href commençant par /#
Je ne veux que les href commençant par /quelquechose ou /quelque/chose1
Dernière modification par abecidofugy (Le 29/09/2019, à 11:39)
KDE neon pour le plaisir d’avoir un O/S moderne et puissant et Firefox Nightly comme navigateur. Aussi sous Windows 11 pour une partie de mon travail…
Hors ligne
#15 Le 29/09/2019, à 11:44
- pingouinux
Re : Expressions régulières
N'utilisant que la ligne de commande, je ne peux pas répondre, désolé…
Hors ligne
#16 Le 29/09/2019, à 11:55
- abecidofugy
Re : Expressions régulières
Si tu veux récupérer les lignes complètes :
grep 'href="/[^#]' fichier
Édité : Petite correction
Y’a pas une erreur avec les doubles quotes ?
KDE neon pour le plaisir d’avoir un O/S moderne et puissant et Firefox Nightly comme navigateur. Aussi sous Windows 11 pour une partie de mon travail…
Hors ligne
#17 Le 29/09/2019, à 12:10
- abecidofugy
Re : Expressions régulières
Si ça peut aider : je cherche à n’avoir que les liens internes de cette page : https://www.publicitem.pro/ (enfin de tout le domaine)
grep 'href="/[^#]' publicitem.html ça ne garde pas les URL internes, fais le test.
KDE neon pour le plaisir d’avoir un O/S moderne et puissant et Firefox Nightly comme navigateur. Aussi sous Windows 11 pour une partie de mon travail…
Hors ligne
#18 Le 29/09/2019, à 12:18
- kamaris
Re : Expressions régulières
Ben si, essaie avec
grep -o 'href="/[^#]' publicitem.html
Le truc c'est qu'on ne sait pas vraiment ce qu'entend ton logiciel par « expression régulière », et ce qu'il compte comme appartenant ou non au champ href.
Faut-il mentionner les guillemets ?
"/[^#]
Faut-il explicitement mentionner tout ce que l'on souhaite capturer ?
/[^#].*
Hors ligne
#19 Le 29/09/2019, à 12:18
- pingouinux
Re : Expressions régulières
Je veux bien tester si tu me fournis un fichier.
Hors ligne
#20 Le 29/09/2019, à 12:33
- abecidofugy
Re : Expressions régulières
$ wget www.publicitem.pro
$ grep -o 'href="/[^#]' index.html
href="//
href="//
href="//
href="//
href="//
href="//
href="//
href="//
href="//
href="//
href="//
href="//
href="//
href="//
href="/s
href="/s
href="/s
href="/"
href="/s
href="/p
href="/a
href="/b
href="/d
href="/c
href="/p
href="/d
href="/s
href="/s
href="/s
href="/s
href="/s
href="/s
href="/u
href="/c
Le href ne doit pas faire partie de la réponse, ni les guillemets. Je voudrais comme réponse tous les résultats d’URL (donc des liens a href="quelque chose"), ayant un href commençant par / et sans ancre nommée.
Donc n’avoir que les résultats :
/quelquechose
/quelquechoseautre
/quelque/chose/autre1
Dernière modification par abecidofugy (Le 29/09/2019, à 12:33)
KDE neon pour le plaisir d’avoir un O/S moderne et puissant et Firefox Nightly comme navigateur. Aussi sous Windows 11 pour une partie de mon travail…
Hors ligne
#21 Le 29/09/2019, à 12:40
- pingouinux
Re : Expressions régulières
wget www.publicitem.pro grep -o 'href="/[^#]' index.html href="// ............
C'est normal : avec -o, tu ne récupères dans la ligne que ce qui correspond à l'expression donnée.
Ce serait plus facile si tu nous montrais :
- un fichier de départ
- le résultat que tu souhaites
Hors ligne
#22 Le 29/09/2019, à 12:43
- kamaris
Re : Expressions régulières
Il faudrait même avoir le logiciel en question pour faire les tests !
Ou au moins sa doc…
Dernière modification par kamaris (Le 29/09/2019, à 12:44)
Hors ligne
#23 Le 29/09/2019, à 12:45
- abecidofugy
Re : Expressions régulières
Le fichier de départ ? Ben c’est le code source de la page www.publicitem.pro qu’on obtient avec wget www.publicitem.pro
Le résultat que je souhaite ?
/services
/portfolio
/agence-communication
/services/agence-communication
/services/agence-web
…
Bref, tous les liens internes exclusivement.
KDE neon pour le plaisir d’avoir un O/S moderne et puissant et Firefox Nightly comme navigateur. Aussi sous Windows 11 pour une partie de mon travail…
Hors ligne
#24 Le 29/09/2019, à 12:56
- jamesbad000
Re : Expressions régulières
La bonne réponse a été données en #13
grep -Po '(?<=href=")/[^#"]*(?=")' fichier
Il faut "juste" que le logiciel support les référence avant/arrière...
Dernière modification par jamesbad000 (Le 29/09/2019, à 13:01)
L'espace et le temps sont les modes par lesquels nous pensons, et non les conditions dans lesquelles nous vivons. (Signé Albert)
Hors ligne
#25 Le 29/09/2019, à 12:58
- nany
Re : Expressions régulières
Bonjour,
wget www.publicitem.pro
grep -o 'href="/[^#]*"' index.html
Il faudrait même avoir le logiciel en question pour faire les tests !
Ou au moins sa doc…
+1
En ligne