GNU/Linux >> Linux の 問題 >  >> Linux

正規表現の定義?

私は最近、この質問への回答に対するコメントで正規表現を構成するものについて、Ghotiと友好的な議論を交わしました。以下は正規表現であると主張しました:

`[Rr]eading[Tt]est[Dd]ata`

Ghotiは反対し、代わりにファイルグロブであると主張しました。ウィキペディアのグロブページは次のように主張しています(私の強調):

グローブには、式の前の部分の複数の
繰り返しを許可するクリーネ閉包の構文は含まれていません。 したがって、これらは正規表現とは見なされません。
正規表現は、任意の有限のアルファベットに対して
より多くの正規言語のセットを記述することができます。

ただし、この主張に対する引用はなく、これは特定のウィキペディア編集者の意見にすぎないことを示しています。

SingleUNIX®Specificationバージョン2には、基本正規表現(BRE)を1文字にすることもできると記載されています。

通常の文字は、それ自体に一致するBREです。
サポートされている文字セット内のすべての文字(BRE特殊文字にリストされているBRE特殊文字
を除く)。

では、* nixの世界での正規表現の定義は何ですか?その定義はファイルグロブを除外しますか?

承認された回答:

lk-が言ったように、 -name findのオプション 引数を正規表現ではなくグロブとして扱います。

文字列がグロブまたは正規表現として解釈されるか、単なる文字列として解釈されるかは、解釈を行うために使用されているものによって異なります。それは文脈の問題です。例の文字列、[Rr]eading[Tt]est[Dd]ata さまざまな方法で評価できますが、 使用方法によって異なります。グロブとして使用してください。グロブです。正規表現として使用してください。正規表現です。これが発生した質問の場合、OPは文字列を正規表現として記述しました。したがって、彼はそれを正規表現として解釈することを計画していたと推測できます。

絶対に、単一の文字が正規表現になることもあります。文字列にすることも、グロブにすることもできます。必要に応じて、バイトまたはtinyintとして解釈できます。それはすべてコンテキストに依存します。

さまざまな形式の正規表現の仕様がいくつかあります。 BREとEREは十分に文書化されています。 PCREは、多数の機能を追加します。多くの正規表現インタープリターは、たとえば、「すべてのEREと一部のPCRE」を実装します。または、EREからいくつかの機能を差し引いたものを実行します。正式な仕様に従えば、多くのツールが正規表現のサポートを主張しますが、これは正しくないか不完全であることがわかります。詳細を知ることで、正規表現を評価しているツール内で利用可能な機能のコレクションにソリューションを適応させることができます。

関連: `ls`コマンドは最新のディレクトリの内容をリストしませんか?

つまり…グロブを「除外する」定義を探しているのなら、これを間違った視点から見ていることになります。 それは何ですか 使用方法によって決まります


Linux
  1. 正規表現がXで機能するのに、Yでは機能しないのはなぜですか?

  2. 正規表現文字として解釈されるために、Sedで正規表現文字をエスケープする必要がありますか?

  3. sed の正規表現で `\d` が機能しないのはなぜですか?

  1. 先読みを使用して正規表現で特殊文字を除外する方法

  2. Linux の cp コマンドで正規表現をどのように使用しますか?

  3. Linux GUI 正規表現ファイル リネーム機能 (置換あり)

  1. Linuxでのセッションの定義は何ですか?

  2. Linux ユーザーを検証するための正規表現は何ですか?

  3. grep 抽出番号範囲