2012-03-15 10 views
3

正規表現に関する情報がたくさんありますが、私の問題の解決策を見つけることができません。私は以前これがカバーされていないことを願っています。いつものように、私は解決策を得ることに興味を持っているわけではありません。このようにして、私はbashを学ぶことができ、それはすべて複雑です。正規表現bashの不規則性

私の例:あなたのほとんどが推測できるよう

#!/bin/bash 
Stext="Hallo World" 
re="(.[a-z]*)$" 
[[ $Stext =~ $re ]] 
DBTable=${BASH_REMATCH[1]} 
echo $DBTable 
DBTable=`expr "$Stext" : $re` 
echo $DBTable 

、私はが2回印刷さ世界を得ていない、と私は理由を知りません。

これまでのところ私はに式を脱出してexprのバージョンのうち、いくつかの応答を取得するために管理しています

DBTable=`expr "$Stext" : '\(.[a-z]*\)$'` 

これはまだ期待される結果が得られません。

誰でも私にこのことについていくつかの洞察を与えることができます。暗黙のうちにある文字列—の開始時に固定さ

答えて

3

expr扱い正規表現、それは暗黙のうちにあなたが興味のあるポイントの前にすべてのものを提供する必要が^ —を追加します。さらに、exprは拡張正規表現(ERE)ではなく、基本正規表現(BRE)を使用するので、()ではなく、\(\)と書く必要があります。したがって、これは:

expr 'Hallo World' : '.[a-z]* \(.[a-z]*\)$' 

は、Worldと表示されます。

+0

ブリリアント、今私はBREとEREについて知っています。おかげさまで@ruakh –

+0

@ WillemP.Botha:大歓迎です! :-) – ruakh

+0

「暗黙的にアンカーされた」とは、正規表現が**定義されている方法**です。正規表現は、検索パターンではなく文字列の集合を表します。 "grepの振る舞い"は、正規表現を取り、それが一致するまで入力の連続する位置に適用することによって実装されます。あなたがそれをしないと、正規表現は単に "この入力が私と一致する"または "この入力はありません"とあなたに伝えます。 – Kaz