3

「+99」、「-82」、「5」、「auto」、「max」などの文字列を一致させようとしています== autoとmax、および符号付きまたは符号なしの数値(整数など)

正規表現を試しました

var='^([+|-]{0,1}[0-9][0-9]*)|(auto)|(max)$'

しかし、「少なくともn回、ただしm以下」の場合は失敗します。私の場合は{0,1}とにかく、var='ab{0,1}'とvar='ab{2}'をテストしました。どちらも機能しません

私はそれ以上のことはしませんでしたが、次の問題はこれらによって起こり得ると思います:()

#!/ bin / bashバージョン4.2.24(1)を使用しています

前もって感謝します!

edit1: この正規表現をグループ化する方法がわかりませんかKarolyHorvathが提案したように機能すること。どこかで見つけたこのチェック機能を使っています。

#!/bin/bash

INTEGER_MAX='^([+-])?[0-9][0-9]*$'

function isNumeric() { 

    check=`echo $1 | sed "s/\($2\)//"`

    if [ -z ${check} ]; then
        return 0
    else
        return 1
    fi
}

isNumeric "$1" "$INTEGER_MAX" && echo "passed"

edit2-解決済み

それはで働いています

RE='(^([+-])?[0-9]+$)|(^auto$)|(^max$)'

でテスト済み

[[ $string =~ $pattern ]] && echo "passed"

THX!

4

1 に答える 1

5

セレクターは、またはのいずれかの[+|-]1 文字を受け入れます。あなたはおそらく次のことを意味していました: .+ |-[+-]

{0,1}is ?, andの省略形[0-9][0-9]*は単に[0-9]+ですが、もちろんどちらも機能するはずです。

とにかく、私は var='ab{0,1}' と var='ab{2}' をテストしましたが、これらはどちらも機能しません

ab{0,1}または のいずれaabを意味します。量指定子は、通常は文字である最後の式、またはセレクターで機能します。式に量指定子を適用する場合は、それをグループ化する必要があります。

さらに質問がある場合は、正規表現の使用方法を投稿してください。問題が何であるかわかりません...

于 2012-05-07T17:52:17.787 に答える