Форум OlegON > Компьютеры и Программное обеспечение > Операционные системы и программное обеспечение > Программирование

PHP. Задачки с PCRE (регулярные выражения) и вопросы по ним. : Программирование

28.03.2024 18:38


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, время: 18:38.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.