Regex в KornShell

Я пытаюсь проверить, является ли переменная точно двумя числами, но я, может казаться, не понимаю это.

Как Вы делаете регулярные выражения проверки (regex) в KornShell (ksh)?

Я попробовал:

if [[ $month =~ "[0-9]{2}" ]]
if [[ $month = _[0-9]{2}_ ]]

Я не смог найти любые документы о нем.

Понимание?

10
задан javaPlease42 3 January 2014 в 23:06
поделиться

4 ответа

case $month in
    [0-9][0-9]) echo "ok";;
    *) echo "no";;
esac

должны работать.

Если вам нужен полный поиск по регулированию REGEXP, вы можете использовать Exep , как это:

if echo $month | egrep -q '^[0-9]{2}$'
then
    echo "ok"
else
    echo "no"
fi
8
ответ дан 3 December 2019 в 16:52
поделиться

Откуда я составлял, это, скорее всего, проверяет числовые месяцы:

if (( $month >= 1 && $month <= 12 ))

или

[[ $month =~ ^([1-9]|1[012])$ ]]

или включить ведущий ноль для однозначных месяцев:

[[ $month =~ ^(0[1-9]|1[012])$ ]]
5
ответ дан 3 December 2019 в 16:52
поделиться

ksh не использует регулярные выражения; Он использует проще, но все еще довольно полезный язык называется «шаблоны раковины». Ключевыми идеями являются

  • классы, такие как [0-9] или [Chly] соответствовать любому символу в классе.
  • . не является специальным персонажем; Это соответствует только . .
  • ? соответствует любому одному символу.
  • * соответствует любой последовательности символов.
  • В отличие от регулярных выражений, шаблоны глобуса оболочки должны совпадать со словом , поэтому он работает так, как будто это было регентом, он всегда начал с ^ и заканчивается $ .

Глобабийские узоры не такие мощные, как обычные выражения, но они намного проще читают, и они очень удобны для сопоставления имена файлов и простых слов. Корпус конструкция - мой любимый для совпадения, но есть другие.

Как уже отмечалось ALOK, вы, вероятно, хотите

case $number in
  [0-9][0-9]) success ;;
  *) failure;;
esac

, хотя, возможно, вы можете предпочесть не совпадать с двумязначным числом с начальным нулем, поэтому предпочитаю [1-9] [0-9] .

3
ответ дан 3 December 2019 в 16:52
поделиться

Вы также можете попробовать это

$ month=100
$ [[ $month == {1,2}([0-9]) ]] && echo "ok" || echo "no"
no
$ [[ $month == [0-9][0-9] ]] && echo "ok" || echo "no"
no
$ month=10
$ [[ $month == {1,2}([0-9]) ]] && echo "ok" || echo "no"
ok
$ [[ $month == [0-9][0-9] ]] && echo "ok" || echo "no"
ok
0
ответ дан 3 December 2019 в 16:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: