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


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

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

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

Оффлайн verplas

  • Автор темы
  • Любитель
  • *
  • Сообщений: 65
    • Просмотр профиля
нужно составить два выражения, любая строка кроме "." и любая строка кроме "." и ".."

думаю, это не сложно, но совсем не дружу с регэкспами
« Последнее редактирование: 28 Июля 2010, 15:18:36 от verplas »

Оффлайн VestniK

  • Активист
  • *
  • Сообщений: 594
    • Просмотр профиля
Re: помогите с регулярными выражениями
« Ответ #1 : 28 Июля 2010, 14:08:44 »
Может проще взять выражения "^\.$" и "^[.]{1,2}$" и проверять что строка не удовлетворяет им?

Например
echo "some line here" | egrep -v "^[.]{1,2}$"
отфильтрует всё кроме '.' и '..'

Оффлайн verplas

  • Автор темы
  • Любитель
  • *
  • Сообщений: 65
    • Просмотр профиля
Re: помогите с регулярными выражениями
« Ответ #2 : 28 Июля 2010, 14:15:23 »
сначала так и хотел сделать, но я использую библиотеку, в которой есть функция, устанавливающая regexp как фильтр, вот мне и нужно составить подобное выражение выражение, т.е. не получится проверить совпадает ди строка

Оффлайн VestniK

  • Активист
  • *
  • Сообщений: 594
    • Просмотр профиля
Re: помогите с регулярными выражениями
« Ответ #3 : 28 Июля 2010, 14:32:17 »
Тогда извращаться придётся, например так: "^((.[^.].*)|([^.].*))$"

Пользователь решил продолжить мысль 28 Июля 2010, 14:50:12:
Сори плохой вариант, он обрезает все строки начинающиеся с двух точек. Нужно ещё один OR воткнуть на этот случай. Но сдаётся мне что кто-нибудь может подсказать вариант получше. Я не знаю как отрицание средствами самого регуляного выражения сделать.
« Последнее редактирование: 28 Июля 2010, 14:50:12 от VestniK »

Оффлайн verplas

  • Автор темы
  • Любитель
  • *
  • Сообщений: 65
    • Просмотр профиля
Re: помогите с регулярными выражениями
« Ответ #4 : 28 Июля 2010, 14:52:59 »
VestniK, все равно спасибо за помощь

Пользователь решил продолжить мысль 28 Июля 2010, 15:18:20:
условия немного изменились, достаточно составить одно выражение: любая строка кроме "."
« Последнее редактирование: 28 Июля 2010, 15:18:20 от verplas »

Оффлайн VestniK

  • Активист
  • *
  • Сообщений: 594
    • Просмотр профиля
Re: помогите с регулярными выражениями
« Ответ #5 : 28 Июля 2010, 15:36:01 »
Ну тут тогда достаточно будет "^((\..*)|([^.].*))$". Только одно но, этот подход пустые строки тоже отрезает

Оффлайн verplas

  • Автор темы
  • Любитель
  • *
  • Сообщений: 65
    • Просмотр профиля
Re: помогите с регулярными выражениями
« Ответ #6 : 28 Июля 2010, 15:52:07 »
Ну тут тогда достаточно будет "^((\..*)|([^.].*))$". Только одно но, этот подход пустые строки тоже отрезает
а пустых и не будет у меня, сейчас попробую :)

Оффлайн DedMorozzz

  • Активист
  • *
  • Сообщений: 299
  • Эникейщик
    • Просмотр профиля
Re: помогите с регулярными выражениями
« Ответ #7 : 28 Июля 2010, 16:00:01 »
избыточно условие. Проще #[^\.]# - всё :)

Оффлайн VestniK

  • Активист
  • *
  • Сообщений: 594
    • Просмотр профиля
Re: помогите с регулярными выражениями
« Ответ #8 : 28 Июля 2010, 16:31:56 »
Он однако строку состоящую только из точек в любых количествах режет. А если нужно чтобы только одну или две точки фильтровал? Я так понимаю, что данная задача скорей всего для фильтрации списка файлов в директории, а "..." это вполне допустимое имя файл, хоть и странное.

Оффлайн DedMorozzz

  • Активист
  • *
  • Сообщений: 299
  • Эникейщик
    • Просмотр профиля
Re: помогите с регулярными выражениями
« Ответ #9 : 28 Июля 2010, 16:37:45 »
если сделать название "..." - допустимым, а ".." и "." - нет. Тогда проще делать вот так:
#.{3,}# ну иль я явном виде задать диапазон символов, по типу #[A-zА-яёЁ0-9\-\. и.т.д.]{3,}# - это для того, что бы, к примеру, символы аски были не допустимы. Так же можно указать различные модификаторы, что бы юникод считался, и любой регистр, тогда упросить мона будет.

Оффлайн VestniK

  • Активист
  • *
  • Сообщений: 594
    • Просмотр профиля
Re: помогите с регулярными выражениями
« Ответ #10 : 28 Июля 2010, 18:11:44 »
Цитировать
если сделать название "..." - допустимым, а ".." и "." - нет. Тогда проще делать вот так:
#.{3,}#
Ну ты же понимаешь, что это регулярное выражение само по себе просто требует чтобы длинна строки была не мение 3х, и будет резать вполне себе допустимые строки в духе "a" и "ab". У топикстартера был вопрос как написать выражение отрезающее "." и ".." но пропускающее всё остальное, ну ещё можно не беспокоиться о пустых строках. Те варианты которые я приводил я тестировал на нескольких примерах, чтобы убедиться что они работают именно так как нужно. Вот если твои два варианта объеденить по или, то получается то что нужно "((\.{3,})|([^\.]))" в более которкой форме чем у меня.

Оффлайн DedMorozzz

  • Активист
  • *
  • Сообщений: 299
  • Эникейщик
    • Просмотр профиля
Re: помогите с регулярными выражениями
« Ответ #11 : 28 Июля 2010, 18:28:06 »
Кстати. Рассмотрю интересную задачку на регулярные выражения :)
Рассмотрю в принципе любые варианты. Конечно с нормальным уровнем сложности а не "найти все буквы \"а\" ":)
Ну иль
(Нажмите, чтобы показать/скрыть)
подробности. И уже некоторые примеры.

Оффлайн verplas

  • Автор темы
  • Любитель
  • *
  • Сообщений: 65
    • Просмотр профиля
Re: помогите с регулярными выражениями
« Ответ #12 : 28 Июля 2010, 19:46:26 »
спасибо всем большое, вы мне очень помогли :)

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: помогите с регулярными выражениями
« Ответ #13 : 28 Июля 2010, 20:56:45 »
Могу подсказать хорошую, но к сожалению платную и под венду, программу, которая мне очень помогает составлять регэкспы. Вот она. Работает под вином. Если народ может подсказать открытые альтернативы - очень буду рад :)

Оффлайн DedMorozzz

  • Активист
  • *
  • Сообщений: 299
  • Эникейщик
    • Просмотр профиля
Re: помогите с регулярными выражениями
« Ответ #14 : 28 Июля 2010, 21:01:14 »
ненаю, ненаю. Я пользуюсь бесплатной, под все ос "прогой" - мозг :)
Кстати по поводу этой проги - был однажды прикол. Составил регулярку (действительно ОЧЕНЬ сложную) смотрю в пыхе - не работает. Точнее работает ВООБЩЕ странно. Разбирал разбирал - всё норм. Прогнал в этой проге - всё норм....через пару часов поискаов и разбирательств с парочкой сеньйоров на фирме было установленно, что это баг пыха. Так что если тестить уже - то без всяких прог :)
Регексп был нечто на подобии этой, только чуток рекрусивной и в 2 раза больше :)
(Нажмите, чтобы показать/скрыть)
пришлось разбить на 2 части :)
« Последнее редактирование: 28 Июля 2010, 21:06:43 от DedMorozzz »

 

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