2012-05-14 33 views
0

假設句明確的正則表達式

「的時間,現在晚上8:15。其次是一些其他文本」

爲什麼下面的正則表達式不匹配行?

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

我的MAC,使用GNU的egrep

$ egrep的--version egrep的(GNU的grep)2.5.1

+1

「失敗」是什麼意思? – 2012-05-14 02:09:31

+0

它不符合。認爲這很明顯。我會更新問題 – JAM

+0

@JAM我認爲這很清楚你的意思。艱難的人羣在這裏。 – McGarnagle

回答

2

完全無法重現。

的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 

那麼你錯了一些地方...

編輯啊,問題是空間。 egrep不承認\s;這是一個Perlism。你的問題沒有包括那裏的空間。

+0

馬克,爲什麼同樣的正則表達式不解析「時間現在是晚上8點15分一些文字」(下午之前的空間)。當我失敗了,當我'''它的工作。 – JAM

+0

查看編輯答案; '\ s'在egrep中不起作用。 –

+0

它就是這樣。謝啦 – JAM

2

這是因爲領先的和尾隨符號正則表達式:<和>。把這些拿出來,這是一場比賽。

+0

但是爲什麼呢?直到[Pp] [Mm] – JAM

+0

@JAM正則表達式似乎一直工作很簡單:讓正則表達式模式中的那些要求它們在目標字符串中。也許你的意思是他們是** \ b **(單詞界限)或其他? – McGarnagle

+0

'egrep'[1-9] \ s *:\ s * [0-9] {2} \ s * [Pp]'file'也無法解析。沒有<>目前 – JAM

1

在我的OS X機器上使用GNU egrep,表達式工作得很好,並匹配您的行。它可能是你的特定版本的grep(它是不是GNU的grep?)

+0

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

+0

啊,我剛剛看到問題更新。有趣的,因爲它似乎對我來說很好(複製和粘貼上面的問題)。 – plasma

+0

@JAM:在這裏使用相同的版本。 – plasma