2016-07-07 5 views
1

の先頭にパターンを返しません: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 

私は何かを明らかに誤解しなければならないと思いますが、私は何を見つけることができません。

はあなたの助けをありがとう:)

+1

" man expr "の情報は"アンカー "マッチでヒントします... cf. @Kleidersack – Dilettant

+0

からの提案された答えあなたがマッチさせたい特定のパターンは何ですか?あなたの検索パターンは一般的に数字を探していて、あなたは検索文字列に '123'、 '456'、 'ghi789'を持っています。 – Fazlin

+0

回答ありがとうございます。私は「アンカーされた試合」が何であるかはわかりません。私はそれを探します。私が見つけようとしているのは、最初の数字が連続していることです。 Kleidersackの答えがうまくいきます! –

答えて

1

expr match "123 abc 456 def ghi789 z" '[^0-9]*\([0-9]*\) はそれを行いますか?

expr match "123 abc 456 def ghi789 z" '^[^0-9]*\([0-9]*\) 

が良く合うでしょう表現を、一部^[^0-9]は数字ではないすべての文字をスキップ」と読むことができますので、 - コメントで述べたと同様

(ただ、冒頭で[0-9]*代わりの.*を追加しました) ([^0-9])form begin(最初の文字として^) "

+1

は多分' expr'マッチが0または多くの非数字式が役立ちます追加理由を説明する「アンカー」という、manページからの情報を追加しますか? – Dilettant

+0

はこの命題をありがとう、それが正常に動作します!なぜなら、私はこれを見つけようとするつもりです:p私はこれを "固定"していると思います - それが鍵です。アンカー。 –

関連する問題