Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: регулярные выражения  (Прочитано 4837 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн snap

  • Автор темы
  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
регулярные выражения
« : 19 Марта 2009, 23:08:23 »
решил поучить программирование в bash, и сразу споткнулся на рег.выражении,
подскажите, что означает эта строка

*[!0-9]*
Не вьеду в назначение первой звездочки, а далее вроде так надо понимать;
любой символ , кроме цифр, который встречается ноль или более раз
Для чего нужна первая звездочка???
Или я что то не допонимаю? Подскажите, плиз

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: регулярные выражения
« Ответ #1 : 20 Марта 2009, 08:40:28 »
Я понимаю так.
Выражение в котором хоть одна цифра или !.
Насчет повторений д.б. запятая.
Для "кроме" д.б. ^, но не в начале (это трактуется как начало выражения).
Если что-то непонятно, рекомендую книгу Дэвида Тинсли.

Пользователь решил продолжить мысль: 20 Марта 2009, 08:46:15
Я понял. Вы из С помните про ! (это и вызывает неясность).
« Последнее редактирование: 20 Марта 2009, 08:46:15 от alexander.pronin »

Оффлайн Dreammaker

  • Любитель
  • *
  • Сообщений: 71
    • Просмотр профиля
Re: регулярные выражения
« Ответ #2 : 20 Марта 2009, 09:37:57 »
Для "кроме" д.б. ^, но не в начале (это трактуется как начало выражения).

Ещё ^ может значит "не" когда стоит в начале последовательности типа [^a-zA-Z0-9] - то есть, все символы, кроме латинских букв и цифр. По крайней мере, в перл-совместимых регулярных выражениях так, может в баше как-то по-другому.

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: регулярные выражения
« Ответ #3 : 20 Марта 2009, 10:06:44 »
Да, я заумно объяснил (точнее не пожевал). :)
Надеюсь, что никого не запутал.
 

Оффлайн Dreammaker

  • Любитель
  • *
  • Сообщений: 71
    • Просмотр профиля
Re: регулярные выражения
« Ответ #4 : 20 Марта 2009, 10:58:34 »
Да, я заумно объяснил (точнее не пожевал). :)


Сейчас перечитал - теперь понимаю, что вы тоже самое написали, но всё равно до конца не уверен  ;D

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: регулярные выражения
« Ответ #5 : 20 Марта 2009, 11:13:01 »
Главное, чтобы автор понял, что мы тут написали. А от него пока ничего не слышно.

Оффлайн snap

  • Автор темы
  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
Re: регулярные выражения
« Ответ #6 : 20 Марта 2009, 11:57:42 »
В bash advanced есть такой пример

    case "$1" in
   ""      ) lines=50;;
   *[!0-9]*) echo "Usage: `basename $0` file-to-cleanup"; exit $E_WRONGARGS;;
    *       ) lines=$1;;
    esac

т.е программа ждет ввод с терминала, и если цифра то делаем одно, иначе другое
Вот как раз второй case просматривает, и если в него попадает все, кроме цифры в чистом виде, программв прекращает свое выполнение.
что то я туплю, но уже какой раз ваши ответы перечитываю, но сорри, въехать никак не могу

ps книжка Дэвида Тинсли по linux shell на подходе, вначале хотел понять на примерах  из "Advanced Bash-Scripting Guide"
а что значит такое сокращение  --- д.б  :)
« Последнее редактирование: 20 Марта 2009, 12:08:21 от snap »

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: регулярные выражения
« Ответ #7 : 20 Марта 2009, 12:10:41 »
д.б. - должно быть.
Книга Дэвида Тинсли есть в интернете. Ничего лучше по bash не найдете.

Оффлайн snap

  • Автор темы
  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
Re: регулярные выражения
« Ответ #8 : 20 Марта 2009, 12:20:55 »
Цитировать
Я понимаю так.
Выражение в котором хоть одна цифра или !.

мне кажется, вроде это не так трактуется, так как в примере , если попадется цифра, то программа вылетит, если трактовать так
Цитировать
Выражение в котором хоть одна цифра или !.
,т.е
до обработки цифры (самый последний case) программа работает от обратного, все что не цифра, обрабатывается в первых двух случаях, и если первые два случая не подошли, то пришедшее значение явно остается за цифрой
« Последнее редактирование: 20 Марта 2009, 12:25:58 от snap »

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: регулярные выражения
« Ответ #9 : 20 Марта 2009, 12:36:57 »
[^0-9] - все кроме цифр
[abc] - что-то из ряда или a или b или c
^[0-9]* - начинается на цифру
^[^0-9]*  - начинается не с цифры

Оффлайн snap

  • Автор темы
  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
Re: регулярные выражения
« Ответ #10 : 20 Марта 2009, 13:23:31 »
Все понял, огромное спасибо,
 но вопрос по примеру все же остался, такое ощущение, что пример некорректно написан, не знаю, не пойму, почему именно так они написали этот пример

   case "$1" in
   ""      ) lines=50;;
   *[!0-9]*) echo "вы ввели не цифру или цифру с буквами";
    *       ) lines=$1;echo "вы ввели цифру, все ок";;
    esac

изменил строчку на

  *[^0-9]*) echo "вы ввели не цифру или цифру с буквами"; exit $E_WRONGARGS;;

Да, это решение (запись) правильное , но
Понимаете, если первый пример со строкой    *[!0-9]* трактовать как любая цифра и "!" , то при вводе цифры  из терминала он должен вывести это сообщение echo "вы ввели не цифру или цифру с буквами";  Но этого не происходит, выводится echo "вы ввели цифру, все ок";

ps скорее всего, это уж мои догадки , что восклицательный знак "!" эквивалентен знаку "^"

« Последнее редактирование: 20 Марта 2009, 13:31:19 от snap »

burgua

  • Гость
Re: регулярные выражения
« Ответ #11 : 20 Марта 2009, 13:30:26 »
по регулярным советую

http://rubular.com/

Оффлайн snap

  • Автор темы
  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
Re: регулярные выражения
« Ответ #12 : 20 Марта 2009, 13:36:21 »
 :) Спасиб за терпение, Вроде все понимаю, все рег выражения перевариваю,
Да, заморочки с этим восклицательным знаком в примере
Хочется так сказать докапаться до истины, а истина, у меня почемуто ассоциируется теперь именно с этим вариантов что ^ equal ! , так как в этой трактовке пример работает так, как и должен

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: регулярные выражения
« Ответ #13 : 20 Марта 2009, 13:40:30 »
Хорошо бы иметь программу для тестирования рег. выражений отдельно. Очень полезная вещь.

Оффлайн snap

  • Автор темы
  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
Re: регулярные выражения
« Ответ #14 : 20 Марта 2009, 13:45:51 »
но пример  мной взят из оф.гайда , где какой то Стефан предложил следущую реализацию проверки  :)
http://tldp.org/LDP/abs/html/sha-bang.html
example 2.3

может быть в каких то версиях shell-a этот восклицательный знак трактуется как "не" ?
« Последнее редактирование: 20 Марта 2009, 13:47:54 от snap »

 

Страница сгенерирована за 0.018 секунд. Запросов: 21.