我正在阅读GNU find
的手册页,偶然发现了这个开关:
-regextype type
Changes the regular expression syntax understood by -regex and
-iregex tests which occur later on the command line. Currently-
implemented types are emacs (this is the default), posix-awk, posix-
basic, posix-egrep and posix-extended.
这些正则表达式语法之间有什么区别?我更熟悉Ruby的正则表达式,那么我应该在find
中使用什么类型的正则表达式呢?
2条答案
按热度按时间ki0zmccv1#
正则表达式有很多种实现方式。POSIX扩展表达式知道与POSIX基本表达式相同的元字符,但有一些添加,如您所见on this page。
在某些情况下,可能需要使用其中一个实现已知的某个元字符,您可以使用此选项来告诉
find
您正在使用哪一个。如果你只需要一个更基本的表达式,posix-basic就足够了。此外,您可能只是更喜欢您习惯的RegEx类型,并且
find
能够正确解释它。正如fge提到的,使用this site来了解更多关于RegEx语法之间的差异。
krcsximq2#
对于一个更一般的答案,因为大多数人都是通过搜索“regex的不同类型是什么”来到达这里的,这里有一些最常见的regex类型:
POSIX基本正则表达式(BRE):这是在基于UNIX的系统中用于基本模式匹配的标准语法。它使用一组有限的元字符,包括^、$、.、、+、?、[、]、(、)和。
*POSIX扩展正则表达式(ERE):这是在基于UNIX的系统中用于更高级的模式匹配的更强大的语法。它添加了更多的元字符,包括{,},|,和^(.
*兼容Perl的正则表达式(PCRE):这是许多编程语言中使用的语法,包括Perl、PHP和Python。它添加了许多高级功能,如lookaheads、lookbehinds、命名捕获组等。
*JavaScript正则表达式:这是JavaScript编程语言使用的语法。它类似于PCRE,但有一些区别,例如使用\b代替\y作为单词边界。
*.NET正则表达式:方法使用的语法这。NET Framework.它类似于PCRE,但有一些区别,例如使用(?)而不是(?P)。
每种类型的正则表达式都有自己的一组规则和语法,并且某些功能可能在一种类型中可用,但在另一种类型中不可用。重要的是要根据您的特定需求选择正确的正则表达式类型,并在使用不同的系统或编程语言时注意它们之间的差异。
对于
find
命令,请注意-regex
选项匹配文件的整个路径,包括其目录,因此它可能不适合所有搜索场景。如果只想匹配文件名,可以使用-name
选项。