Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Регулярные выражения  (Прочитано 6100 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Aleshka
Гость
« : 25-12-2007 13:12 » 

Есть строка содержащая слова, нужно выделить из строки подстроку стоящая между какими-то определенными знаками.
Приведу пример есть строка:
"Я пришел в бассейн "Спартак" плавать."  Как мне из этой строки выделить слово Спартак?? Или еще пример,
Nov 21 03:27:04 gub mpd: [vpn1] LCP: Down event Выделить слово стаящее между [], т.е vpn в данном случае??
Спасибо.

Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 25-12-2007 14:33 » 

Aleshka, ну и? где попытка?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 25-12-2007 17:07 » 

Aleshka, посмотри у нас книги по регулярным выражениям: https://club.shelek.ru/viewfiles.php?id=45
Составление регулярных выражений ничем от программирования не отличается.

Для выделения текста оберни нужное место круглыми скобками.
Полезно, по возможности, использовать привязку к началу строки - "^".

Первая задача примитивна, НО - только если все тестируемые строки будут в каком же формате. В общем то, ко второй строке это тоже относится.

1.
Используй ".*" для "любое число любых символов".
Находи кавычку - """.
Далее находи "любой текст, кроме кавычки" - "[^"]*".
Потом опять кавычка.
остальной текст можно проигнорировать, если он в дальнейшем не нужет.

2.
Это типичная для *nix строка лога. Формат можно узнать из мануалов - он фиксированный.

Ищем слово из трех букв - "[[:alpha:]]{3}". С некоторой натяжкой можно использовать "\w{3}".
Далее один пробел - " " или "\s" - последний вариант универсальнее, т.к. "\s" ловит любой "пробельный символ".
Далее одна или две цифры - "\d{1,2}".
Пробел.
Название хоста - буквы, цифры, подчеркивание, минус - "[-\w]+". Минус в классе символов должен стоять в начале - иначе он означает диапазон.
Пробел.
Имя процесса. Т.к. оно оканчивается здесь двоеточием, то ищем все, кроме двоеточия: "[^:]+".
Пробел.
Спецсимволы, чтобы они интерпретировались как обычные символы, надо предварять бекслешом - "\". Соотв., для прямоугольной скобки - "\[".
Далее - все, кроме закрывающейся прямоугольной скобки - "[^\]]+".
Закрывающаяся скобка - "\]".
Все остальное можно проигнорировать.

Хотя первый вариант почти ничем не отличается от второго, я их решил по разному. Вообще, решить эти задачи можно множеством способов и выбирать их стоит под конкретную задачу.
« Последнее редактирование: 25-12-2007 17:10 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Mayor
Специалист

ru
Offline Offline

« Ответ #3 : 26-01-2008 10:08 » 

Есть строка содержащая слова, нужно выделить из строки подстроку стоящая между какими-то определенными знаками.

более конкретные условия:

что ты подразумеваешь под выделить?
количество раз выделений на строку?
выделить по условиям окружающих или выделяемых символов?
требуется ли модификация выделения или сохранение или число выделеных подстрок?

« Последнее редактирование: 26-01-2008 10:12 от Mayor » Записан

1n c0de we trust
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines