重复的简单正则表达让我难过

时间:2010-12-18 03:10:17

标签: regex repeat

问候。

这么简单的问题让我难过。这里的人非常乐于助人。

我正在尝试匹配包含一些固定文本和随机数字的字符串。

echo blah blah abc123 | grep -o abc
abc

echo blah blah abc123 | grep -o abc[0-9]
abc1

echo blah blah abc123 | grep -o abc[0-9]+

echo blah blah abc123 | grep -o "abc[0-9]+"

echo blah blah abc123 | grep -o "abc[0-9]*"
abc123

echo blah blah abc123 | grep -o abc[0-9]{3}

echo blah blah abc123 | grep -o "abc[0-9]{3}"

*运算符(匹配零次或多次)是唯一可以按预期工作的运算符。

为什么+运算符(匹配1次或多次)不匹配?

为什么特定的重复计数运算符{3}不匹配?

我在Ubuntu 10.10下的bash shell中运行这些示例,如果它有所不同。

非常感谢。

1 个答案:

答案 0 :(得分:6)

当你逃避特殊字符时它们都起作用:

$ echo blah blah abc123 | grep -o "abc[0-9]\+"
abc123
$ echo blah blah abc123 | grep -o "abc[0-9]\{3\}"
abc123

未转义,正则表达式正在寻找文字+{,正如您可能推断的那样。

至于为什么你必须保持*未转义,但你必须逃避+,我不确定。