の先頭にパターンを返しません:exprはbashのこのバージョンを使用して文字列
パターンは、私が探していた場合、私は、文字列内の私のパターンを見つけるためにexpr
を取得できますか
GNU bash, version 4.1.2(1)-release (i386-redhat-linux-gnu)
この文字列は始まっていないのですか?
例:第2の例で
expr match "123 abc 456 def ghi789" '\([0-9]*\)' #returns 123 as expected
expr match "z 123 abc 456 def ghi789" '\([0-9]*\)' #returns nothing
、I 123が返されることを期待します。
さらなる分析:
私は私のコマンドで.*
を追加することで、文字列の末尾から開始した場合、私は奇妙な結果を得る:
expr match "123 abc 456 def ghi789" '.*\([0-9]*\)' #returns nothing
expr match "123 abc 456 def ghi789" '.*\([0-9]\)' #returns 9 as expected
expr match "123 abc 456 def ghi789 z" '.*\([0-9]\)' #returns also 9
を、それはパターンができているようです文字列の終わりに(検索の開始時に)見つけられます。また、文字列の最後にない場合もあります。しかし、正規表現の最後に*
を追加するとうまくいきません。
一方で、私は文字列の先頭から開始した場合に同じことが適用されない:
expr match "z 123 abc 456 def ghi789" '\([0-9]\)' #returns nothing
私は何かを明らかに誤解しなければならないと思いますが、私は何を見つけることができません。
はあなたの助けをありがとう:)
" man expr "の情報は"アンカー "マッチでヒントします... cf. @Kleidersack – Dilettant
からの提案された答えあなたがマッチさせたい特定のパターンは何ですか?あなたの検索パターンは一般的に数字を探していて、あなたは検索文字列に '123'、 '456'、 'ghi789'を持っています。 – Fazlin
回答ありがとうございます。私は「アンカーされた試合」が何であるかはわかりません。私はそれを探します。私が見つけようとしているのは、最初の数字が連続していることです。 Kleidersackの答えがうまくいきます! –