[ОТВЕТИТЬ]
Опции темы
11.12.2014 13:01  
OlegON
Регулярные выражения - неотъемлемая часть знаний системного администратора. Уже поднимались темы:
Немного о grep и регулярных выражениях
Регулярные выражения: выбираем знак дроби
Вот тут еще документация на русском:

Решил проверить заинтересованность в знаниях, поэтому создал онлайн-сервис по проверке регулярных выражений, чтобы вы тоже могли потренироваться в составлении регулярок.

Пишите вопросы и примеры. Для тех, кто силен в теме - первая задачка:
Задача с ютубом
Необходимо составить выражение на замену таким образом, чтобы при добавлении к строке ютуба #t=234 параметр преобразовывался в &start=234 и вставлялся в тег.
 
11.12.2014 13:49  
OlegON
Запутал что ли? :)

ну, давайте попроще

часто надо принять строку не из шаблона, например: "Тел. код 495 и номер 123-4-5-6-7"
чтобы выкинуть из строки все, что не цифра, можно использовать шаблон "#[^0-9]#"
в строку замены надо вписать пробел, хотя на практике обычно оставляют пустую строку.
Объясню, из чего состоит шаблон: # - разделитель, в простом случае он ограничивает начало и конец шаблона. В [] определяем диапазон интересуемого, т.е. в нашем случае это цифры 0-9. Знак ^ обозначает "НЕ". Т.е. в переводе весь шаблон "НЕ цифры" заменяем на строку замены, т.е. пробел (или другой символ, если захотите).

Если нам нужно вытащить только код города, то это можно сделать следующим образом. Переведу "#.*код ([0-9]{3}) .*#":
.* - любое количество символов или их отсутствие, поясню, что, например, .+ - ненулевое количество любых символов. Точнее . - это любой символ, * - любое количество, + - ненулевое количество.
код - слово, как оно есть, с пробелом на конце
() - искомые данные, первые скобки (то, что внутри скобок) - это $1, вторые скобки - $2
[0-9] - цифра от нуля до девяти
{3} - впередиидущий символ повторяется три раза, т.е. [0-9]{3} - это любая трехзначная цифра
потом пробел и .*, что я описывал выше. Все вышеперечисленное заменяется на "code $1", т.е. слово code и то, что было в скобках.
 
11.12.2014 15:49  
Micle
Для меня составление регулярок средней сложности всегда было из разряда шаманских плясок с бубном )) я конечно ещё раз вернусь к задачке, но с первого раза не получилось корректно разобрать. Нужно жеж учитывать что добавлено может быть не только #t=(\n+) после него могут быть "инородные включения", перед ним... Универсального варианта мне сходу получить не удалось. Буду ещё пробовать как выберу время.
 
11.12.2014 16:06  
OlegON
\n - перевод строки, наверное, т.е. #t=([0-9]+), если уж на то пошло :) Попробуй начать с малого, решать задачки и задавать их другим :)
 
11.12.2014 16:16  
Micle
да верно. имелось в виду \d
 
11.12.2014 18:12  
Micle
Короче. Я наигрался )) не получается нифига. Не знаю как объяснить но в ряде случаев натыкался на то что поведение PCRE на сайте не соответствует описанию в документации. Что это? разность версий? Возможно. Но скорее всего это из за того что я использую не тот бубен. )))
 
11.12.2014 18:23  
OlegON
Возможно. Я думал, что надо копать сюда. Но у меня тоже не получилось. Пока сделал двумя preg_replace, некрасиво и стыдно :(
 
12.12.2014 08:31  
OlegON
Ну, давайте задачку попроще :)
Есть строка "Weather condition: -15C"
Задача - достать значение температуры.
 
12.12.2014 09:49  
Micle
Цитата:
Сообщение от OlegON
Ну, давайте задачку попроще :)
Есть строка "Weather condition: -15C"
Задача - достать значение температуры.

Вариант
 
12.12.2014 09:53  
Micle
кривовато немного ))
 
 


Опции темы



Часовой пояс GMT +3, время: 00:46.

Все в прочитанное - Календарь - RSS - - Карта - Вверх 👫 Яндекс.Метрика
Форум сделан на основе vBulletin®
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.