Expression regulière

Le
Mathieu Coutaud
Bonjour,

j'utilise l'expression régulière suivante (bibliothèque regex de GNU) :
(^|[[:space:]]|[[:punct:]])Ceci($|[[:space:]]|[[:punct:]])
sur la phrase "Ceci est un test" et malheureusement cela ne fonctionne pas.

Alors que l'expression :
[[:space:]|[:punct:]]est[[:space:]|[:punct:]]
fonctionne. Quelle syntaxe utilisée avec ^ et $ ?

Merci.
--
Mathieu C.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Mickaël Wolff
Le #6676571
(^|[[:space:]]|[[:punct:]])Ceci($|[[:space:]]|[[:punct:]])
fonctionne. Quelle syntaxe utilisée avec ^ et $ ?


Pourquoi mets-tu un pipe entre ^ et le premier [ ?

J'aai uen fois fait un tutoriel sur les regexp, avec un exemple
d'usage en C
--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org

Mathieu Coutaud
Le #6677081
Mickaël Wolff wrote:
(^|[[:space:]]|[[:punct:]])Ceci($|[[:space:]]|[[:punct:]])
fonctionne. Quelle syntaxe utilisée avec ^ et $ ?


Pourquoi mets-tu un pipe entre ^ et le premier [ ?

En fait je souhaite que n'importe quel mot pris individuellement

("Ceci", "est", "un", "test") puisse "matcher", pas seulement celui en
début de ligne...


J'aai uen fois fait un tutoriel sur les regexp, avec un exemple
d'usage en C
Merci pour le lien, même s'il ne résout pas mon problème de syntaxe.



Mathieu Coutaud
Le #6677071
Mathieu Coutaud wrote:
Mickaël Wolff wrote:
(^|[[:space:]]|[[:punct:]])Ceci($|[[:space:]]|[[:punct:]])
fonctionne. Quelle syntaxe utilisée avec ^ et $ ?


Pourquoi mets-tu un pipe entre ^ et le premier [ ?

En fait je souhaite que n'importe quel mot pris individuellement

("Ceci", "est", "un", "test") puisse "matcher", pas seulement celui en
début de ligne...


J'aai uen fois fait un tutoriel sur les regexp, avec un exemple
d'usage en C t'aider.

Merci pour le lien, même s'il ne résout pas mon problème de syntaxe.



Ca se fait tout simplement avec le word boundaries b, que je n'avais
pas vu :
"\bCeci\b"



Mickaël Wolff
Le #6677061

En fait je souhaite que n'importe quel mot pris individuellement
("Ceci", "est", "un", "test") puisse "matcher", pas seulement celui en
début de ligne...


Il y a une séquence de caractères pour spécifier un séparateur de mot.
La chaîne C pour trouver le mot « mot » : "\<mot\>".

Pour trouver tous les mots correspondant à ton expression régulière,
il faut mettre en place une récursion. Tu ne peux pas tout trouver d'un
coup.

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org

Stephane CHAZELAS
Le #6682311
2008-05-21, 18:05(+02), Mathieu Coutaud:
[...]
j'utilise l'expression régulière suivante (bibliothèque regex de GNU) :
(^|[[:space:]]|[[:punct:]])Ceci($|[[:space:]]|[[:punct:]])
sur la phrase "Ceci est un test" et malheureusement cela ne fonctionne pas.

Alors que l'expression :
[[:space:]|[:punct:]]est[[:space:]|[:punct:]]


Le "|" est a l'interieur des [...] ici!

fonctionne. Quelle syntaxe utilisée avec ^ et $ ?
[...]


(^|[[:space:]]|[[:punct:]])Ceci($|[[:space:]]|[[:punct:]])

Devrait marcher si tu utilises les regexp etendues
(REG_EXTENDED).

Note que tu peux aussi l'ecrire:

(^|[[:space:][:punct:]])Ceci($|[[:space:][:punct:]])

Avec les regexps basiques standard (les BRE de GNU connaissent
|):

^(.*[[:space:][:punct:]]){0,1}Ceci([[:space:][:punct:]].*){0,1}$

(ca ne matchera pas forcement le meme "Ceci" note).

Note que b ou < ou > ne sont pas standard.

--
Stéphane

Mathieu Coutaud
Le #6690191
Stephane CHAZELAS wrote:
2008-05-21, 18:05(+02), Mathieu Coutaud:
[...]
j'utilise l'expression régulière suivante (bibliothèque regex de GNU) :
(^|[[:space:]]|[[:punct:]])Ceci($|[[:space:]]|[[:punct:]])
sur la phrase "Ceci est un test" et malheureusement cela ne fonctionne pas.

Alors que l'expression :
[[:space:]|[:punct:]]est[[:space:]|[:punct:]]


Le "|" est a l'interieur des [...] ici!

fonctionne. Quelle syntaxe utilisée avec ^ et $ ?
[...]


(^|[[:space:]]|[[:punct:]])Ceci($|[[:space:]]|[[:punct:]])

Devrait marcher si tu utilises les regexp etendues
(REG_EXTENDED).
Effectivement merci.



Note que tu peux aussi l'ecrire:

(^|[[:space:][:punct:]])Ceci($|[[:space:][:punct:]])

Avec les regexps basiques standard (les BRE de GNU connaissent
|):

^(.*[[:space:][:punct:]]){0,1}Ceci([[:space:][:punct:]].*){0,1}$

(ca ne matchera pas forcement le meme "Ceci" note).

Note que b ou < ou > ne sont pas standard.
Merci aussi pour cette info.



Publicité
Poster une réponse
Anonyme