expr
このユーティリティで正規表現の一致がどのように機能するかを理解するのに役立つ人はいますか?私はマニュアルページを読んで、ここに抜粋があります。
STRING : REGEXP
anchored pattern match of REGEXP in STRING
しかし、私はそれがどのように機能するのか理解していません。私はいくつかのテストを行いました。
[root@192 ~]# expr "abc" : '.*'
3
[root@192 ~]# expr "abc" : 'b.*'
0
[root@192 ~]#
expr
これら2つのコマンドは何をしていますか?最初のコマンドでは、expr
最初の文字で一致する項目が見つかったように見え、一致するabc
項目の長さが報告されます。しかし、なぜ2番目のコマンドを生成するのですか0
?私はここでロジックを理解していません。
ところで、正規表現がどのように機能するかを知っています。
答え1
参照されたマンページの関連部分は次のとおりです。固定マッチ。これは、正規表現が最初から最後まで文字列全体と一致する必要があることを意味します。だからあなたは.*
実際に^.*$
。もちろん、マニュアルページはあまり明確ではありませんが、基本的に一致する長さを印刷するようです。
$ expr "abc" : '.*'
3
明らかに、キャプチャグループを使用して、マッチングそのものを印刷することができます。
$ expr "abc" : '\(.*\)'
abc
$ expr "abc" : '.\(b.\)'
bc