Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Expression regulière

6 réponses
Avatar
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.

6 réponses

Avatar
Mickaël Wolff
(^|[[: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 <http://lupusmic.org/pro/docs/regex.php>. Si ça peut t'aider.

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

Avatar
Mathieu Coutaud
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 <http://lupusmic.org/pro/docs/regex.php>. Si ça peut t'aider.

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



Avatar
Mathieu Coutaud
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 <http://lupusmic.org/pro/docs/regex.php>. Si ça peut
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 :
"bCecib"



Avatar
Mickaël Wolff

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

Avatar
Stephane CHAZELAS
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

Avatar
Mathieu Coutaud
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.