2011-12-21 17 views
-3

私の仕事は、javaとシェルスクリプトで正規表現を書いて、その数字の前後に任意の数の文字を含むすべての文字列を検証することでした。Javaでの正規表現とシェルスクリプトでの正規表現との比較

誰がシェルスクリプトで

を私の要件を満たす定期esxpressionを作成するために私を助けてくださいすることができます私は[a-z]*[0-9]{1}[a-z]*を書き、それがのJavaのためにうまく働いたが、それは全くシェルスクリプト のために働いていません(コメントから): 私はgrepで試しましたが、それは私に有用な結果を与えませんでした。 [...]文字列が有効であれば、特定の操作を実行したいと考えています。だから私はあなたが正規表現に関連したJavaにおける構文の違いやシェルスクリプトにいくつかの光を入れてもらえ

if [$password eq [a-z]*[0-9]{1}[a-z]]; then 
    # "do this" 
else 
    # "do that" 
fi 

ようにそれを使用しましたか?

+0

どのスクリプト言語?どのオペレーティングシステムですか? – duffymo

+0

シェルで使用しているコードを表示できますか? –

+0

シェルスクリプトの正規表現はどういう意味ですか?どのツールによって? grep?どのように正規表現を含むあなたのシェルcmdのように見えるのですか? btw {1}は省略できます – Kent

答えて

1

シェル環境で正規表現を評価するツールは指定していません。しかし、ほとんどのツールは{1}の部分を認識しません。とにかく[0-9]だけが正確に1つの出現のために立っているので、この部分はとにかく必要ではありません。

シェルスクリプトの一部は次のようになります。

if [[ "$var" =~ ^[a-zA-Z]*[0-9][a-zA-Z]*$ ]]; then 
    echo matching 
else 
    echo not matching 
fi 

キーパーツは以下のとおりです。

  • [[表現ではなく、[ 1を使用し、前者は==経由でパターンマッチングを(サポートしているので、 )と正規表現のマッチング(=~経由)
  • =~は、ほとんどのregexpライブラリのように、true eパターンはと一致します。文字列の一部ですが、必ずしも完全な文字列である必要はありません。例えば、[a-z]*[0-9][a-z]*は、パターンが3barの部分と一致するため、最初の[a-z]の出現、1回の出現は[0-9]、3回目の出現は2回目の[a-z]と一致するため、foo123bar456blaと一致します。したがって、正規表現を^$を使用して文字列の先頭と最後に固定する必要があります。 Javaでは

:ここ

String var = ...; 
if(var.matches("[a-zA-Z]*[0-9][a-zA-Z]*")) 
    System.out.println("matches"); 

String.matchesが暗黙のうちに完全な文字列に一致します。それはすべて歴史のなかでぼんやりとしている。

+0

あなたの応答のためにありがとう –

+0

あなたの応答のためにありがとう... 私はgrepで試みましたが、それdidnot私に有用な結果をもたらしました。 基本的に私はif文でそれを使いたいと思っていて、文字列が有効であれば私は特定の操作を実行したいと思います。 だから私は のように使った[$ password eq [a-z] * [0-9] {1} [a-z]]; はその後 は他 Fiの はあなたが正規表現 –

+0

@omkarsohaniに関連したJavaおよびシェルスクリプトの構文の差分にいくつかの光を置くことができる「ことをやる」「これはない」:それはですので、質問自体にコメントを移動してくださいその答えには重要です。将来同様の情報を検索している人は、そうでなければ情報を見つけられないかもしれません。 –