Regex `{n} `正则表达式中posix类后的迭代元字符
我正在学习正则表达式。我对这个例子有一些疑问: 我想查找所有具有常规扩展名的文件的名称。这项工作:Regex `{n} `正则表达式中posix类后的迭代元字符,regex,Regex,我正在学习正则表达式。我对这个例子有一些疑问: 我想查找所有具有常规扩展名的文件的名称。这项工作: ls | grep '\.[[:lower:]][[:lower:]][[:lower:]]$' 但这并不是: ls | grep '\.[[:lower:]]{3}$' 据我所知,{n}迭代元字符的结果与前一个字符正好出现的模式匹配。它不适用于POSIX类吗?还是我在这里犯了一些愚蠢的错误?在这里,你需要摆脱大括号,这样才能工作: ls | grep '\.[[:lower:]]\{3\}$
ls | grep '\.[[:lower:]][[:lower:]][[:lower:]]$'
但这并不是:
ls | grep '\.[[:lower:]]{3}$'
据我所知,{n}
迭代元字符的结果与前一个字符正好出现的模式匹配。它不适用于POSIX类吗?还是我在这里犯了一些愚蠢的错误?在这里,你需要摆脱大括号,这样才能工作:
ls | grep '\.[[:lower:]]\{3\}$'
在POSIX extended(ERE)中,这一要求已被放弃,ERE还最终向正则表达式添加了替换(
\
)(尽管一些使用BRE的工具确实支持通过\\\
进行替换).为什么我们需要双方括号?@thefourtheye,因为POSIX中的命名字符类就是这样工作的。谢谢您的解释。@thefourtheye:例如,如果您想构造一个包含
、0
和小写ASCII字符的字符类,您可以使用[:lower:]
@TimPietzcker哦,我现在明白了[:lower::
与我们在其他语言中的范围a-z
相同。感谢您的澄清:-)