34

こんにちは素晴らしいコミュニティ、

正規表現に関しては、私は完全にドープです。私はそれを学ぶのを先延ばしにしました..そして今、私の怠惰が私に追いついてきました.

私がやろうとしていること:
文字列がこの形式に一致するかどうかを確認します:

10_06_13

すなわち。今日の日付、または「2digits_2digits_2digits」の日付

私がやったこと:

regex='([0-9][0-9][_][0-9][0-9][_][0-9][0-9])'
if [[ "$incoming_string" =~ $regex ]]
then
   # Do awesome stuff here
fi

これはある程度機能します。しかし、着信文字列が等しい場合011_100_131...それでも正規表現チェックに合格します。

誰かが私を正しい方向に向けるのを手伝ってくれたら幸いです。
乾杯

4

1 に答える 1

54

=~左側の文字列が右側の正規表現に一致する場合、成功します。文字列が正規表現と一致するかどうかを知りたい場合は、次のように両側で正規表現を「固定」する必要があります。

regex='^[0-9][0-9][_][0-9][0-9][_][0-9][0-9]$'
if [[ $incoming_string =~ $regex ]]
then
  # Do awesome stuff here
fi

は文字列の^先頭で$のみ成功し、 は最後でのみ成功します。

ノート:

  1. ()正規表現と""から不要なものを削除しました[[ ... ]]
  2. =~文字列が一致すれば成功すると書かれているため、bash のマニュアルは言葉遣いが不十分です。
于 2013-06-10T16:14:05.340 に答える