正規表現の.*と*の違い

正規表現の.*と*の違い

以下を含む「test」というファイルがあります。

linux
Unixlinux
Linuxunix
it's linux
l...x

これで:を使用すると、grep '\<l.*x\>'次のようになります。

linux
it's linux
l...x

ただし、を使用すると、grep '\<l*x\>'次のように一致します。

l...xただし、リファレンスガイドによると、*を使用すると、前の項目が0回以上一致します。つまり、「l」で始まり「x」で終わるものと一致する必要があります。

期待した結果が表示されない理由を説明できる人はいますか?それとも私が間違って理解していますか?

ベストアンサー1

シンボル(.*)

正規表現の * と * は、文字当たりの文字数ではなく、数を意味し、より正確には意味します。「0個以上」。また、方法「すべての単一文字」

だからそれらを合わせると「0個以上の文字があります。」。たとえば、次の文字列は次のようになります。

  • Linux
  • リンNx
  • lnx
  • ハイLinux
  • ラックス

と一致します<l.*x>。最後の項目が重要であることを示します。.*やはり一致できません。

シンボル(*)

私が言ったように、*だけがカウンターです。したがって、文字の後に入れると、次のようになります。「エル」*言う「0個以上のl」

grep は と一致しますが、考え方とl*x異なるl...x場合があります。

% echo "l...x" | grep "l*x"
l...x

末尾の「x」と一致します。 「l」は、「x」の前に「x」があることを除いて、一致理由とは何の関係もありません。「0個以上のl」

おすすめ記事