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

4

3 回答 3

2

这是因为正则表达式中的前导和尾随符号:< 和 >。把它们拿出来,这是一场比赛。

于 2012-05-14T02:10:50.847 回答
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。你的问题不包括那里的空间。

于 2012-05-14T02:27:40.463 回答
1

在我的 OS X 机器上使用 GNU egrep,表达式工作得很好并且匹配你的行。它可能是您特定版本的 grep(它是非 GNU grep 吗?)

于 2012-05-14T02:23:19.290 回答