2012-05-14 7 views
0
clarification

En supposant phraseexpression régulière

« Il est actuellement 20h15. Suivi par un autre texte »

Pourquoi le regex suivant correspond pas à la ligne?

egrep '\<[1-9]\s*:\s*[0-9]{2}\s*[Pp][Mm]\>' file 

Je suis sur MAC, en utilisant GNU egrep

$ egrep egrep --version (GNU grep) 2.5.1

+1

"Échec" dans quel sens? –

+0

Il ne correspond pas. Pensé que c'était clair. Je vais mettre à jour la question – JAM

+0

@JAM Je pensais que c'était assez clair ce que tu voulais dire. Foule difficile ici. – McGarnagle

Répondre

2

Totalement incapable de se reproduire.

Mac OS X 10.7:

(0)marks-mac-mini> cat file 
The time is now 8:15pm. Followed by some other text 
"The time is now 8:15pm. Followed by some other text" 
(0)marks-mac-mini> egrep '\<[1-9]\s*:\s*[0-9]{2}\s*[Pp][Mm]\>' file 
The time is now 8:15pm. Followed by some other text 
"The time is now 8:15pm. Followed by some other text" 
(0)marks-mac-mini> egrep --version 
egrep (GNU grep) 2.5.1 

Vous avez tort de quelque chose ... quelque part

EDIT Ah, le problème est l'espace. egrep ne reconnaît pas \s; c'est un Perlisme. Votre question n'incluait pas l'espace là-bas.

+0

Mark, pourquoi la même regex ne pas analyser "L'heure est maintenant 20h15 du texte" (Espace avant pm). Quand il échoue, quand ça marche, ça marche. – JAM

+0

Voir la réponse éditée; '\ s' ne fonctionne pas dans egrep. –

+0

Voilà. Merci mec – JAM

2

Il est à cause des principaux et des symboles de suivi dans la regex: < et>. Sortez-les et c'est un match.

+0

Mais pourquoi est-ce? Regex semble fonctionner bien jusqu'à ce que [Pp] [Mm] – JAM

+0

@JAM C'est assez simple: avoir ceux dans le modèle regex exige qu'ils soient dans la chaîne cible. Peut-être que vous vouliez dire qu'ils étaient ** \ b ** (limite de mot) ou quelque chose? – McGarnagle

+0

'egrep '[1-9] \ s *: \ s * [0-9] {2} \ s * [Pp]' file' échoue également à analyser. Non <> présent – JAM

1

En utilisant GNU egrep sur ma machine OS X, l'expression fonctionne très bien et correspond à votre ligne. Il pourrait s'agir de votre version particulière de grep (est-ce un grep non-GNU?)

+0

21:24:04 ~/regex $ egrep --version egrep (GNU grep) 2.5.1 – JAM

+0

Ah, je viens de voir la mise à jour de la question. Intéressant, car il semble bien fonctionner pour moi (copier et coller de la question ci-dessus). – plasma

+0

@JAM: Utiliser la même version ici. – plasma