Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex `{n} `正则表达式中posix类后的迭代元字符_Regex - Fatal编程技术网

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
相同。感谢您的澄清:-)