システムが提供する正規表現ライブラリの確認

システムが提供する正規表現ライブラリの確認

私は昨日、次の正規表現を試しましたless^\+1[[:space:]]*$そしてそれは私にとって効果的でしたgrep。ではうまくいかなかったlessので、マンページでサポートされている内容を確認し、以下を発見しました。

/pattern
    Search forward in the file for the N-th line containing the pattern. N defaults to 1. The pattern is a regular expression, as recognized by the regular expression library supplied by your system. 
    The search starts at the first line displayed (but see the -a and -j options, which change this).

私はこの質問をしましたが、/dev/chat実際にどのライブラリが現在使用されているかを確認する方法は言うまでもありません。私は現在Fedora 30を使用していますが、Linuxに拘束されない答えになることを願っています。

したがって、質問は次のようになります。

  1. 私のシステムが提供するどのless正規表現ライブラリを使用するかをどのように決定しますか?
  2. 私のシステムが提供する正規表現ライブラリはどういう意味ですか?
  3. 提供された正規表現ライブラリは、他のどのユーティリティやプログラムに影響しますか?
  4. ご使用のシステムで利用可能な特定の正規表現ライブラリーについて言及している場合は、その正規表現ライブラリーページへのリンクを提供してください(可能であれば)。

lddプログラム

[unge@localhost ~]$ ldd "$(command -v less)"
    linux-vdso.so.1 (0x00007fff040e0000)
    libtinfo.so.6 => /lib64/libtinfo.so.6 (0x00007f6733339000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f6733173000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f67333be000)

ベストアンサー1

  1. lessバイナリを参照している場合は、less --versionどの正規表現実装を使用しているかを知らせます。

    $ less --version
    less 487 (GNU regular expressions)
    Copyright (C) 1984-2016  Mark Nudelman
    
    less comes with NO WARRANTY, to the extent permitted by law.
    For information about the terms of redistribution,
    see the file named README in the less distribution.
    Homepage: http://www.greenwoodsoftware.com/less
    

    --with-regexビルド時にライブラリは指定された値によって決まります./configure

    --with-regex=LIB        select regular expression library (LIB is one of auto,none,gnu,pcre,posix,regcmp,re_comp,regcomp,regcomp-local) [auto]
    

    ビルドログで追跡されます。

    これらの実装のいくつかは別々のライブラリ(pcre例:)として利用可能であり、他の実装はCライブラリ(gnu例:)に含まれており、そのうちの1つはlessソースコード(regcomp-local例:)に含まれています。

  2. lessauto私はその式が少なくともオプションの文脈でビルドシステムで利用可能なすべてのライブラリを参照していると思います。ビルドされると、与えられたlessバイナリは正規表現の実装を変更しません。

  3. まったく。

サポートされるライブラリは次のとおりです。

  • POSIXregcomp(バージョン文字列で「POSIX」として識別されます)。
  • ポリメラーゼ連鎖反応(「PCRE」);
  • GNU Cライブラリre_compile_pattern(「GNU」);
  • regcmp(「V8」);
  • Unix V8 regcomp、システム提供、またはless独自のコピー(Henry Spencerの実装、「Spencer V8」)
  • re_comp(「BSD」)。

おすすめ記事