Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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.

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 wink

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)

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 :
1569715862-2019-09-29-02-10-05.png

Dernière modification par abecidofugy (Le 29/09/2019, à 01:11)

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)

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

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 :
1569753149-2019-09-29-12-31-39.png
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)

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é… sad

Hors ligne

#16 Le 29/09/2019, à 11:55

abecidofugy

Re : Expressions régulières

pingouinux a écrit :

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 ?

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.

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)

Hors ligne

#21 Le 29/09/2019, à 12:40

pingouinux

Re : Expressions régulières

abecidofugy #20 a écrit :
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.

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

pingouinux a écrit :
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

 

kamaris a écrit :

Il faudrait même avoir le logiciel en question pour faire les tests !
Ou au moins sa doc…

+1

Hors ligne