regex类型之间的差异

omvjsjqw  于 2023-05-01  发布在  其他
关注(0)|答案(2)|浏览(118)

我正在阅读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中使用什么类型的正则表达式呢?

ki0zmccv

ki0zmccv1#

正则表达式有很多种实现方式。POSIX扩展表达式知道与POSIX基本表达式相同的元字符,但有一些添加,如您所见on this page
在某些情况下,可能需要使用其中一个实现已知的某个元字符,您可以使用此选项来告诉find您正在使用哪一个。如果你只需要一个更基本的表达式,posix-basic就足够了。
此外,您可能只是更喜欢您习惯的RegEx类型,并且find能够正确解释它。
正如fge提到的,使用this site来了解更多关于RegEx语法之间的差异。

krcsximq

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选项。

相关问题