我正在阅读 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
?
正则表达式有多种实现方式。 POSIX Extended Expressions 知道与 POSIX Basic Expressions 相同的元字符,但添加了一些内容,您可以在本页上看到。
在某些情况下,人们可能想使用这些实现之一已知的某个元字符,您可以使用此选项来告诉
find
您正在使用哪个。
如果你只需要一个更基本的表达式,posix-basic 就足够了。
此外,您可能更喜欢您习惯的 RegEx 类型,并且
find
能够正确解释它。
如 fge 所述,使用 此站点 了解有关 RegEx 句法之间差异的更多信息。
对于更一般的答案,因为大多数人通过搜索“什么是不同类型的正则表达式”到达这里,这里是一些最常见的正则表达式类型:
POSIX 基本正则表达式 (BRE):这是基于 UNIX 的系统中用于基本模式匹配的标准语法。它使用一组有限的元字符,包括 ^、$、.、*、+、?、[、]、(、) 和 .
POSIX 扩展正则表达式 (ERE):这是一种更强大的语法,用于基于 UNIX 的系统,用于更高级的模式匹配。它添加了更多元字符,包括 {、}、| 和 ^(.
Perl 兼容的正则表达式 (PCRE):这是用于 许多编程语言,包括 Perl、PHP 和 Python。它增加了 许多高级功能,例如前瞻、后视、命名 捕获组等。
JavaScript 正则表达式:这是 JavaScript 编程语言。它类似于 PCRE 但有一些 差异,例如使用 for word boundaries 而不是 \y.
.NET 正则表达式:这是 .NET Framework 使用的语法。它类似于 PCRE 但有一些差异,例如使用 (?) 作为命名捕获组而不是 (?P)。
每种类型的正则表达式都有自己的一套规则和语法,某些功能可能在一种类型中可用,但在另一种类型中不可用。为您的特定需求选择正确类型的正则表达式并在使用不同系统或编程语言时了解它们之间的差异非常重要。
对于
find
命令,请注意-regex
选项匹配文件的整个路径,包括其目录,因此它可能不适合所有搜索场景。如果只想匹配文件名,可以改用-name
选项。