1
grep "http:\/\/.*\.jpg" index.html -o

给我以http://开头并以.jpg结尾的文本

也是如此:grep "http:\/\/.*\.\(jpg\)" index.html -o

有什么不同?是否有任何情况可能会失败?

我使用这个正则表达式来匹配 jpg、png 或 gif:

http:\/\/.*\.\(jpg\|png\|gif\)

与我阅读的反向引用或正则表达式分组有关。看不懂这部分\(\)

4

2 回答 2

2

分组在正则表达式中有两个用途。

一种用途是在使用替代方法时分隔正则表达式的一部分。在您的第三个正则表达式中就是这种情况,它允许您说扩展名可以是 jpg、png 或 gif 中的任何一个。

另一个用途是反向引用。这允许您在 regexp 中稍后引用与 regexp 的较早部分匹配的文本。例如,以下正则表达式匹配任何连续出现两次的字母:

\([a-z]\)\1

反向引用 \1 表示“匹配与正则表达式中的第一组匹配的任何内容”。

于 2012-11-07T09:59:03.280 回答
1

(并且)元字符。即他们不匹配自己,但对grep.

这里

使用反斜杠后跟括号“(”,“)”进行分组。

所以在上面的\(and中\)定义了一组由|字符分隔的匹配可能性。即您的文件扩展名。

于 2012-11-07T09:43:30.957 回答