Регулярки Spar 11 Июн 2010, 18:00 Дайте ссылки на статьи в которых очень подробно описываются регулярные вырожения? --------------- Akdmeh 11 Июн 2010, 18:31 http://phpclub.ru/detail/article/regexp_1 http://phpclub.ru/detail/article/regexp_2 http://habrahabr.ru/blogs/regex/ небольшой блог на хабрахабре - можно почитать некоторые. http://www.pcre.ru/docs/php/ официальная документация по pcre(шаблоны preg_) в php --------------- Akdmeh 11 Июн 2010, 18:31 Перенёс в php - тут меньше шансов потеряться, потом занесу в полезные темы. --------------- Fuelen 11 Июн 2010, 19:27 Есчо http://docs.php.net/manual/ru/regexp.reference.php %) --------------- Spar 11 Июн 2010, 21:06 Спасибо товарищи!) --------------- wapmorgan 03 Авг 2010, 18:34 выдает одно найденное значение с содержимым ($ifs{if $a} {if $b} {/if} хотя должно быть два найденных значения, типа $ifs[0][0] => {if $b} {/if} $ifs[1][0] => {if $a} {/if} уже замучался я с это регуляркой :| , прошу помощи --------------- Mediator21 03 Авг 2010, 18:44 Morgan, попробуй четвертым параметром поставить PREG_SET_ORDER --------------- wapmorgan 03 Авг 2010, 19:00 помогло, спасибо. регулярка может составлена не совсем точно? --------------- wapmorgan 03 Авг 2010, 19:39 а нет, $content = '{if $a} {if $b} {/if} {/if}'; preg_match_all('~\{if (\!)?(\~)?\$((.*)(\.(.*))?)( (.*) ([0-9]+|\$((.*)(\.(.*))?)))?\}(?:\r\n|\n)?(.*)(?:\r\n|\n)?\{\/if\}~uUs', $content, $ifs, PREG_SET_ORDER); print_r($ifs); ===>>> Array ( [0] => Array ( [0] => {if $a} {if $b} {/if} [1] => [2] => [3] => a [4] => a [5] => [6] => [7] => [8] => [9] => [10] => [11] => [12] => [13] => [14] => {if $b} ) --------------- Mediator21 03 Авг 2010, 19:42 Morgan, а ты зачем столько круглых скобок наставил? Они как переменные считаются и результат заносится в массив. Как я понимаю ты шаблонизатор пишеш? --------------- wapmorgan 03 Авг 2010, 19:44 угу) понаставил что сам путаюсь. пытаюсь сделать какую нибудь гибкость. Они как переменные считаются и результат заносится в массив. дык это мне и нужно --------------- Mediator21 03 Авг 2010, 19:51 Morgan, еще по результатам видно что считывается первый {if...} и первый {/if} чтобы не парится можно так сделать {if $a} {/if $a} --------------- wapmorgan 03 Авг 2010, 19:53 хе, я пытался. но он не хочет принимать ни в какую. сейчас дам пример. $content = '{if $a} {if $b} {/if $b} {/if $a}'; preg_match_all('~\{if ((\!)?(\~)?\$((.*)(\.(.*))?)( (.*) ([0-9]+|\$((.*)(\.(.*))?)))?)\}(?:\r\n|\n)?(.*)(?:\r\n|\n)?\{\/if \\1\}~uUs', $content, $ifs); print_r($ifs); ===>>> Array ( [0] => Array ( [0] => {if $a} {if $b} {/if $b} {/if $a} ) [1] => Array ( [0] => $a ) [2] => Array ( [0] => ) [3] => Array ( [0] => ) [4] => Array ( [0] => a ) [5] => Array ( [0] => a ) [6] => Array ( [0] => ) [7] => Array ( [0] => ) [8] => Array ( [0] => ) [9] => Array ( [0] => ) [10] => Array ( [0] => ) [11] => Array ( [0] => ) [12] => Array ( [0] => ) [13] => Array ( [0] => ) [14] => Array ( [0] => ) [15] => Array ( [0] => {if $b} {/if $b} ) ) то есть, первое вхождение айдено а второе нет --------------- Mediator21 03 Авг 2010, 20:02 Morgan, внимательно присмотрись какая у тебя первая переменная :) там третью или четвертую нужно, и перед \\1 знак долара поставь --------------- wapmorgan 03 Авг 2010, 20:06 тьфу, изменил. уже я пробовал, результат нужного не дало --------------- Mediator21 03 Авг 2010, 20:26 Morgan, найдено то и первое и второе, только второе вконце. А ты разделить не хочешь, сначала парсишь на блоки if, а потом то что внутри блока. --------------- wapmorgan 03 Авг 2010, 20:29 16, слишком мутерно каждые вложенные if'ы парсить --------------- wapmorgan 03 Авг 2010, 22:02 решено с помощью создания функции для рекурсивного прохода по всем таким вложенностям. --------------- Sandr 25 Ноя 2010, 22:32 Подскажите, как сделать проверку ввода ника. А именно, в нике могут содержаться рус и англ буквы, цифры, знаки - _ Ник может содержать пробелы, например "n ik" или "n i k" но не " nik". Ну и не должен быть пустым или состоять из пробелов. --------------- Mars 25 Ноя 2010, 23:14 Sandr, $nick = trim(preg_replace('/[^a-zA-Zа-яА-Я0-9_\-\040]/', '', $_POST['nick'])); if (empty($nick)) die('error'); как-то так --------------- Sandr 26 Ноя 2010, 0:05 Mars, спасибо) --------------- Okula 27 Ноя 2010, 1:23 Sandr, А лучше вот так: $ctext = mb_strlen($text, "utf-8"); if(preg_match("/([^a-zа-я0-9\-\_]+(\s){1,})/i", trim($text)) !== 0 || $ctext < 3 || $ctext > 15) die("Error!!!"); + ко всему этому ник от 3 до 15 символов. --------------- Fashion 27 Ноя 2010, 1:36 Okula, неверная регулярка + не оптимальная последовательность применения операций в условии --------------- Okula 27 Ноя 2010, 1:42 Fashion, Можно тогда так: if(preg_match("/[^a-zа-я0-9\s\-\_]/i", trim($text)) !== 0 || preg_match("/(\s){2,}/", trim($text) !== 0) die("Error!"); Хотел просто всё в 1 запихнуть, но к ночи уже мозг не варит. эта ^^ работает. --------------- Fashion 27 Ноя 2010, 1:51 Okula, 20 пост верный) --------------- Okula 27 Ноя 2010, 12:24 Fashion, у меня тоже правильно))) Работает же)))) + в 20 посте если будет множество пробелов то пропустит такой текст. Например я смогу спокойно зарегистрировать себе такой ник: "a(пробел)(пробел)(пробел)(пробел)(пробел)(пробел)(пробел)(пробел)(пробел)(пробел)(пробел)(пробел)(пробел)(пробел)a" --------------- Fashion 27 Ноя 2010, 14:18 Okula, они все равно не отобразятся в таком количестве --------------- Okula 27 Ноя 2010, 14:42 Если потом отфильтровать на выходе текст то не отобразятся, да и к чему такое в базе хранить. Лучше уж вырезать всё ненужное чтоб не захламлять мусором. --------------- Mars 27 Ноя 2010, 14:54 задачи обрезать текст не было, человек просил помощи в регулярке, \s пропустит все юникодные "хак"-пробелы --------------- cem2 28 Ноя 2010, 12:45 Сразу скажу о регулировках начал читать только сегодня.. Проблема такая: Нужно из хтмл документа достать значение сессии. Например в хтмл документе есть такое sait.ru/str.php?ses=wrwet4534efgdf Нужно достать wrwet4534efgdf --------------- ofroke 28 Ноя 2010, 13:43 cem2, print_r(get_headers('URL', true)); --------------- cem2 28 Ноя 2010, 14:13 31. Спасибо я уже разобрался :) --------------- cem2 28 Ноя 2010, 14:14 а так можно?? $authSend = PostData ( 'test1.ru', '/main.php', '&login=' . $login . '&password=' . $password ); preg_match ( "|sid=([0-9A-z]{32})|", $authSend['headers'], $out ); --------------- Ricardo Brandino 23 Янв 2011, 17:03 Занялся изучением регулярок. Проверьте, если что неверно объясните пожалуйста. 1) Проверка логина: '/^[a-z0-9_\-]+$/is'; 2) Проверка капчи: '/^[0-9]+$/s'; 3) Проверка домена: '/^([a-z0-9\-]+\.)+[a-z]{2, 4}$/is'; 4) Проверка емэйл: '/^[a-z0-9_\-\.]+@([a-z0-9\-]+\.)+[a-z]{2,4}$/is'; --------------- Okula 23 Янв 2011, 17:06 Ricardo Brandino, а зачем капчу регуляркой проверять? Ты разьве данные от неё куда-то записываешь или выводишь? --------------- Ricardo Brandino 23 Янв 2011, 17:09 Okula, ну можно и (int), но эт я так, для разбора регулярок) --------------- Ricardo Brandino 23 Янв 2011, 17:14 Okula, ну а вобще, верно составлены? --------------- Mr_Edward 23 Янв 2011, 18:30 В дополнение к теме http://www.addedbytes.com/cheat-sheets/ --------------- Okula 23 Янв 2011, 19:52 Ricardo Brandino, да правильно, только в регулярке где домен проверяешь убери пробел тут {2, 4} --------------- Okula 23 Янв 2011, 19:56 а вообще для составления регулярных выражений имеется специальная программа RegexBuddy В ней есть библиотека с наиболее често встречающимися примерами. --------------- ofroke 23 Янв 2011, 20:21 Она демо? ;/ --------------- Okula 23 Янв 2011, 20:32 ofroke, всмысле демо? Кряк ставишь и всё :) --------------- ofroke 23 Янв 2011, 20:33 Скинь кряк) и прогу сразу. Чет корявую скачал ( --------------- Lexan 23 Янв 2011, 20:42 помогите составить регулярку. В общем есть строка - полный путь к файлу вида folder1\folder2\test\file.jpg, мне надо чтобы функция preg_match извлекла путь до папки т.е. folder1\folder2\test\ и имя файла т.е. file.jpg и записала их в массив --------------- kamuik 23 Янв 2011, 21:26 LeXan, а зачем preg_match? когда для этого есть специальные функции. $file = 'folder1\folder2\test\file.jpg'; echo 'Путь - '.dirname($file).'
Файл - '.basename($file); а если в массив это надо те гг то: $file = 'folder1\folder2\test\file.jpg'; $array = array(dirname($file), basename($file)); echo $array[0].' - '.$array[1]; :hack: --------------- Okula 24 Янв 2011, 0:27 ofroke, у меня только зашиырованный архив на компе остался, а пароль я не помню от архива. Если надо могу скинуть, но думаю проще найти в нете. --------------- Okula 03 Фев 2011, 15:27 Помогите составить регулярку выполняющяя данную задачу: С сайта http://www.amdm.ru/akkordi/a_stydio/ нужно вырезать данные указанные на скриншоте. Регулярка должна содержать многострочный поиск ( модификатор m ) И выводить в массках следуйщее: Из ссылки http://www.amdm.ru/akkordi/a_stydio/11836/djylia/ Масска 1: из ссылке выводить цыфры 11836 (они меняются) Масска 2: после цифр идёт название djylia (оно тоже меняется) И так же 4 маски выводящие цвет текста (RGB код): аккорды, табы, соло, бас. Для каждого слова отдельная маска. Бился вчера над этим всю ночь так и не получилось организовать. Буду очень благодарен --------------- Fashion 03 Фев 2011, 15:39 Okula, интересно. а как регуляркой можно выковырять что-либо с картинки? --------------- Okula 03 Фев 2011, 16:01 Fashion, зачем же так ёрничать)))) Я просто показал что пытаюсь вырезать на изображении, а не на тексте. Из текста прикреплённого ниже нужно вырезать это Джулия
аккорды
табы
соло
бас Вот этой регуляркой пытаюсь выковарить: (.*?)
аккорды
табы
соло
бас --------------- Okula 03 Фев 2011, 16:31 Вот ещё вариант, но он тоже не ищёт то что-нужно ~(.*?)<\/a><\/td>(
(аккорды|табы|соло|бас)<\/font><\/td>){4}~im --------------- Netot 20 Июн 2011, 15:05 Подскажите в чём ошибки? ----- ([*]{0,})(\[*]{0,}\<\/table\>)([*]{0,}) --------------- SigmA 20 Июн 2011, 16:20 .*? --------------- Okula 20 Июн 2011, 20:05 .*? Бред ты пишешь. если прочитать твою регулярку то будет звучать так: "Одно или ноль совпадений множества любых символов включая и ноль" Ты уж определись что ты будешь использовать ? или * --------------- Netot 21 Июн 2011, 10:23 Okula, я вижу вы очень хорошо разбираетесь в регулярных выражениях:). Подскажите пожалуйста какой регуляркой воспользоваться если мне нужно с хтмл станицы вытащить все что находится между
и
. Спасибо! --------------- Okula 21 Июн 2011, 11:55 Netot, вот так preg_match("~(.+)
~is", $text, $inf); print_r($inf); Тут ещё нужно смотреть что находится внутри таблицы и за пределами закрывающего тега Если после него не идёт никаких таблиц где встречается такой-же тег то всё будет норм. Если же тег встречается то нужно привязывать регулярку ещё к чему-то. --------------- Netot 21 Июн 2011, 12:01 Okula, после таблицы идет другой хтмл код, но с этим я постараюсь справиться сам. Спасибо! --------------- Toxin 25 Июн 2011, 14:56 переделайте плиз этот код чтоб обрабатывало неограниченое вложженое количество тега quote $text = preg_replace("#\[quote\](.+?)\[/quote\]#is", "
\\1
", $text); --------------- M0rbid 25 Июн 2011, 15:47 Netot, а что собственно регулярка должна матчить? опиши словами --------------- Lexan 25 Июн 2011, 18:06 Okula, чтобы не "привязывать еще к чему-то", можно использовать модификатор U (модификатор убирающий "жадность" количественных символов) --------------- M0rbid 25 Июн 2011, 20:14 LeXaN, или юзать тот же ленивый .*? как писал сигма и который окула по неопытности счел бредом --------------- Netot 25 Июн 2011, 20:18 M0rbid, я уже все сделал, благодаря Okula:) --------------- Framework 25 Июн 2011, 20:22 Я хочу больше понять как работают регулярные выражения. Вот пример. У меня страница есть. С неё я хочу выделить необходимые данные в массив. А что использовать? preg_match_all ? --------------- M0rbid 25 Июн 2011, 20:28 WMS_ITACHI, да --------------- Lexan 25 Июн 2011, 20:32 WMS_ITACHI, если прочитаешь с понимаем и запоминанием смысла каждой строчки этих статей (особенно первой), то я уверен, ты сможешь решить любую стандартную задачу по регуляркам 1. Теорическая часть - синтаксис регулярных выражений. http://php.su/articles/?cat=regexp&page=006 2. Практическая часть - использование регулярных выражений в функциях http://php.su/articles/?cat=regexp&page=007 Сам по ним учился, так что советую --------------- Framework 25 Июн 2011, 20:41 M0rbid, preg_match_all($pattern, $subject, $matchesarray); Я хочу выделить например некий див класс и запихнуть его в массив что-бы было что-то вроде этого Array ( добавлено спустя 2 минуты: LeXaN, Это Perl или POSIX ? Потом посмотрю. Спасибо :-) --------------- M0rbid 25 Июн 2011, 20:49 WMS_ITACHI, preg_match_all('/
(.*?)<\/div>/', $subject, $matchesarray); да. только кавычки не надо экранировать. вырезай и смотри структуру получившегося массива. echo '
'; print_r($matchesarray); echo '
'; --------------- Toxin 26 Июн 2011, 16:06 сделайте регулятку из 57 поста --------------- M0rbid 26 Июн 2011, 16:25 Toxin, делай по аналогоии с 15 постом http://xwab.mobi/forum/post558613#558613 или рекурсивной подмаской, только я хз как ее правильно применить --------------- Sandr 18 Авг 2011, 19:01 ~^[a-zа-я0-9ё\_\-]{3,15}[\@]{1}[а-яa-z0-9ё\-][\.][а-яa-z]$~iu Подскажите, это правильная регулярка для проверки e-mail'а ? --------------- RiO 18 Авг 2011, 19:10 Sandr, [\@] ,просто @ по круче будет , так же есть такие штуки типа \w \d и откуда в майле кирилица ? --------------- COOLBOY007 18 Авг 2011, 19:16 RiO, http://письмо.рф/ и т.п. --------------- Sandr 18 Авг 2011, 19:17 RiO, уже есть почтовые сервисы в доменном имени которых есть кирилица. --------------- RiO 18 Авг 2011, 19:22 Sandr, rio@mall.gg твоя регулярка меня не пропустит --------------- BMWWW 18 Авг 2011, 19:22 Лажа всё это про русификацию интернета. Лучше бы как был так и оставался английским.... --------------- RiO 18 Авг 2011, 19:25 1alex3, нет в тебе патриотизма ... --------------- Sandr 18 Авг 2011, 19:52 RiO, ну а так, правильно? ~^[a-zа-я0-9ё\_\-]{3,15}@{1}[а-яa-z0-9ё\-][\.][а-яa-z]$~iu --------------- ester 18 Авг 2011, 19:57 @ вместо @{1}, {3,15} не факт, слеши перед _.- не нужны, ^$ не нужно, модификатор u и кириллицу убрать, ибо неактуально. --------------- Fashion 19 Авг 2011, 13:26 ester, "^$ не нужно" ерунду говоришь #^[\w\-]{3,15}@[\da-z]{1,15}\.[a-z]{2,6}$#i --------------- Sandr 19 Авг 2011, 14:11 ester, для меня актуально. Fashion, ester, спасибо) --------------- ester 19 Авг 2011, 20:07 Fashion, точно. --------------- Sandr 25 Сен 2011, 21:20 есть функция: function bbcodes($text) { $regul[]='~\[b\](.+)\[/b\]~mi'; $regul[]='~\[br\]~mi'; $regul[]='~\[i\](.+)\[/i\]~mi'; $regul[]='~\[u\](.+)\[/u\]~mi'; $regul[]='~\[s\](.+)\[/s\]~mi'; $vstav[]='\\1'; $vstav[]=''; $vstav[]='\\1'; $vstav[]='\\1'; $vstav[]='\\1'; $text_article = preg_replace($regul, $vstav, $text); return $text; } Подскажите, как сделать так, чтобы эта функция удфляла сами ббкоды, а текст внутри них оставляла? Т.е. была так "текст" , а стало так "текст" . --------------- Okula 25 Сен 2011, 21:29 Вот так удалит: $text = preg_replace("~\[/?[^\[\]]+\]~s", "", $text); --------------- Sandr 30 Сен 2011, 16:38 Okula, спасибо. --------------- Sandr 09 Окт 2011, 17:30 Мне снова нужна помощь с регулярками.. Есть переменная, $text = 'текст текст текст текст текст'; Нужно вырезать всё, что находится до . Помогите пожалуйста?) --------------- Kovalsky 09 Окт 2011, 17:37 Sandr, а при чем тут регулярки? $text=explode('', $text); print $text[1]; --------------- Sandr 09 Окт 2011, 18:23 Kovalsky, совсем забыл про explode(). Спасибо) --------------- Скитч 22 Окт 2011, 15:53 Есть функция mumbu_highlight($text, $language); Нужно составить регулярку... текст --------------- Okula 22 Окт 2011, 21:35 Скитч, тут не клуб экстрасенсов. --------------- reebest 11 Ноя 2011, 9:19 помогите с регуляркой проверки валидности поле "Дата рождения" формат ввода даты ДД.ММ.ГГГГ --------------- Okula 11 Ноя 2011, 11:23 Вот регулярка на такой формат даты: dd/mm/yyyy (0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)[0-9]{2} --------------- reebest 11 Ноя 2011, 12:38 Okula, в очередной раз спасибо)) --------------- Максим 06 Дек 2011, 16:06 Как грамотно написать выражение для текста: цифры, знаки препинания, пробел между словами, алфавит русский и английский регистронезависимый ? --------------- Okula 06 Дек 2011, 16:13 ~[0-9a-zа-я\s,\.!;:\?]+~isu --------------- Максим 06 Дек 2011, 16:40 Okula, Что-то сообразить не могу, как правильно написать, а то это выражение всё пропускает. if(!preg_match(' ??? ' , $text)) echo 'Так нельзя' ; --------------- luethus 06 Дек 2011, 17:03 Максим, if(!preg_match('~^[0-9a-zа-я\s,\.!;:\?-]+$~isu', $text)) echo 'Так нельзя!'; --------------- Максим 06 Дек 2011, 17:20 luethus, Спасибо, работает. Добавлю ещё а-яё, то не полный алфавит получится :) --------------- Sandr 04 Янв 2012, 12:51 Есть регулярка: ~\[b\](.+)\[/b\]~mi Подскажите, как сделать, чтобы она переносы строки тоже считала? --------------- Okula 04 Янв 2012, 13:19 вместо модификатора m поствь модификатор s --------------- Netot 14 Янв 2012, 11:06 Расшифруйте словами, что означает - .*? --------------- M0rtiis 14 Янв 2012, 11:40 Netot, любое количество любых символов, жадное --------------- Netot 14 Янв 2012, 12:15 M0rtiis, как понимать "жадное" --------------- RuSS 14 Янв 2012, 12:30 Нужно регулярку, для бб кода, чтобы после его вставки, весь текст обрезало.. --------------- Okula 14 Янв 2012, 20:54 RuSS, это ты как себе представляешь? что то я не понимаю... да и не вижу никакого смысла в этом коде. --------------- Framework 14 Янв 2012, 20:57 Okula, Невидимый текст :hack: --------------- RuSS 14 Янв 2012, 22:09 отрезало только текст, после него --------------- Okula 14 Янв 2012, 22:45 $text = preg_replace("~\ --------------- RuSS 16 Янв 2012, 12:27 Okula, спс) правда уже нет надобности в этом коде... --------------- Netot 16 Янв 2012, 18:47 Что такое жадность? --------------- MadLion 12 Фев 2012, 12:15 нужно регулярку которая будет из всего текста вырезать только то что мне нужно в тексте есть вот такие строки url(тут ссылки разные так мне нужны только эти ссылки) --------------- Ninja 14 Фев 2012, 8:05 Как можно заменить вложенные блоки? Например бб-код "[q]бла [q][q]бла[/q]бла[/q] бла [/q]" Хотел с (?R) чет не получается ;/ --------------- djamv 02 Мар 2012, 21:03 Помогите написать регулярку для вырезания данного текста /
Главная/Загрузки/Видео / Ссылки разделяються / --------------- Fuelen 03 Мар 2012, 11:30 Главная/Загрузки/Видео/'; preg_match_all('#\>(.+?)\/#', $var, $out); var_dump($out); array(2) { --------------- TrydORg 12 Мар 2012, 1:00 Здравствуйте, многоуважаемые форумчане! Помогите, пожалуйста, построить шаблон для замены амперсанда html-последовательностью &. У меня возникла проблема с проверкой является ли амперсанд особняком или это уже html-последовательность. К примеру, preg_replace('/&[^amp;]/i', '&', $text); работает только для случая не 'a', не 'm', не 'p' и не ';', а мне же нужно чтобы отрицание применялось к целой последовательности. Спасибо. --------------- Fashion 12 Мар 2012, 8:19 &(?'test\x00','get'=>'\x1Atest'); foreach($z as $kname => $vname) { $vname = preg_replace('~(\x00|\x1A)~isu','',$vname); $u[] =$vname; } print_r($u); --------------- ma3uk 01 Май 2013, 9:58 ^li^, str_replace(array('\x1A','\x00'),$input,$output); --------------- ^li^ 01 Май 2013, 10:47 ma3uk, спс помогло --------------- Diversant 01 Май 2013, 11:44 Чувак, если ты ленивое уйло, пара ссылок на мануалы тебе не помогут ;/ --------------- ^li^ 01 Май 2013, 15:29 Diversant, ты смотрю такой ас не вебаться --------------- Aventus 02 Май 2013, 9:52 есть тег как вырезать имя файла? --------------- Fever 02 Май 2013, 12:17 Aventus, '' --------------- ma3uk 02 Май 2013, 12:27 Aventus, preg_replace("#