if (preg_match('/\\b(http:\/\/|)([-A-Z0-9.]+)(\/[-A-Z0-9+&@#\/%=~_|!:,.;]*)?(\\?[-A-Z0-9+&@#\/%=~_|!:,.;]*)?/i', $subject, $res)) условие, если да; else условие, если нет;
Переменная (массив) в регулярке Переменная (массив) в регулярке. preg_match('/^[^ ^($badNames)].{1,12}$/', $_POST['nameUser']); регулярки вообще бегают по массивам? как правильно сделать, чтобы регуляркой проверялись на исключение все значения массива. Массив типа: PHP: $badNames = array( 'Admin', 'Administrator' );
бегают, если им дать пинка PHP: foreach ($badNames as $item) { preg_match('/^[^ ^($item)].{1,12}$/', $_POST['nameUser']); }
Ru}{eeZ А что вы собственно собрались этими регулярками делать оО. Если проверять, что вводимый логин не начинается со слов в массиве, то лучше использовать strpos PHP: $badNames = array( ' ', 'Admin', 'Administrator' ); //Включая пробел foreach($badNames as $nam) if (stripos($_POST['nameUser'],$nam)===0) die('Неправильное имя');// ===0 чтобы остановиться, только если запрещенное слово в начале строки.
Помогите с рекурсивной регуляркой. Есть входной текст: Code: <div class="a1"> <div class="b1"> <div class="c1"> sometext1 </div> <div class="c2"> sometext2 </div> </div> </div> <div class="a1"> <div class="b1"> <div class="c1"> sometext3 </div> <div class="c2"> sometext4 </div> </div> </div> Нужно получить все, что находится между <div class="a1"> и соответствующим ему </div>. Причем, для любого количества вложенных дивов
Ну если тебе нужно выдернуть только sometext№№, то тогда можно так: PHP: <? preg_match_all('|<div(.*)class(.*)>(.*)</div>|Ui', $s, $result); print_r ($result); ?> Данные будут в $result[0][0] $result[0][1] $result[0][2] $result[0][3]
Pashkela Во-первых, точка НЕ учитывает перевод строки без модификатора "s". Во вторых при вложенных, одинаковых тэгах результатом будем получать кривые данные, типа: Code: <div class="b1"> <div class="c1"> sometext3 И в третьих - зачем использовать подмаски, там где это мягко говоря не нужно?
Во первых всё работает. Это раз. Во вторых (правда не знал, что ты не знаешь таких эелементарных вещей) - если ты проверяешь на исходном тексте в .txt файле, то всё должно быть написано в одну строчку. Никаких <br> я там не увидел. ЗЫЖ Если все сохранить в .txt в одну строку и запустить мою регулярку - всё прекрасно работает
PHP: <?php $in= '<div class="a1"> <div class="b1"> <div class="c1"> sometext1 </div> <div class="c2"> sometext2 </div> </div> </div> <div class="a1"> <div class="b1"> <div class="c1"> sometext3 </div> <div class="c2"> sometext4 </div> </div> </div>'; if (preg_match_all('|<div(.*)class(.*)>(.*)</div>|Ui', $in, $result)) print_r ($result); else echo 'Нету такого'; результат без модификатора s: Code: Нету такого Результат C модификтором s: Code: Array ( [0] => Array ( [0] => <div class="a1"> <div class="b1"> <div class="c1"> sometext1 </div> [1] => <div class="c2"> sometext2 </div> [2] => <div class="a1"> <div class="b1"> <div class="c1"> sometext3 </div> [3] => <div class="c2"> sometext4 </div> ) [1] => Array ( [0] => [1] => [2] => [3] => ) [2] => Array ( [0] => ="a1" [1] => ="c2" [2] => ="a1" [3] => ="c2" ) [3] => Array ( [0] => <div class="b1"> <div class="c1"> sometext1 [1] => sometext2 [2] => <div class="b1"> <div class="c1"> sometext3 [3] => sometext4 ) ) Вопросы?
Реальная html страница: PHP: <?PHP $in="<html>\r\n<body>Надеюсь это не откровение, что в ХТМЛ можно вставлять переводы строк? Хоть они и не будут показаны в браузере, однако в исходном коде будут пристутствовать \r\n</body>\r\n</html>"; echo $in; Вопрос актуален - подскажите рекурсивную регулярку для любого количества вложеных дивов
В качестве доказательсва моей правоты - парсер зе беста с Баша, без всяких там "s" PHP: <? $filename = file_get_contents('http://bash.org.ru/best'); $patern = '|<div>(.*)</div>|Ui'; preg_match_all($patern, $filename, $result); print_r ($result); ?> В исходниках сплошные красные абзацы)) Учим html и не тупим Peace
Pashkela PHP: $patern = '|<body(.*)</body>|Ui'; Проверь, как же так, бедааа, тэг <body есть, закрывающий </body> есть, а ничего не выводит.. Бедаааа. А то что в дивах самих цитат нет переводов строк, как бы логично. Данные берутся из БД и следить за опрятностью кода - не нужно Ну давай расскажи мне что я не прав)
лучше выложу тебе код на твой конкретный случай, раз тебе так надо PHP: <? $in= '<div class="a1"> <div class="b1"> <div class="c1"> sometext1 </div> <div class="c2"> sometext2 </div> </div> </div> <div class="a1"> <div class="b1"> <div class="c1"> sometext3 </div> <div class="c2"> sometext4 </div> </div> </div>'; if (preg_match_all('/<div class="a1">(.*)<\/div>/s', $in, $result)) echo 'Оле!'. "\r\n"; else echo 'Нету такого'; $t = explode("\r\n", $result[0][0]); $count = count($t); for ($i=0;$i<$count;$i++) { if (!empty($t[$i])) {echo $t[$i];} } ?>
$patern = '|<body(.*)</body>|Ui'; потому что закрыть забыл первый тег ">" правильно так: $patern = '|<body>(.*)</body>|Ui';
Pashkela Не пиши по моему вопросу ничего плиз. Вы опасны для моего мозга Эт имба код - прогнать через жадную регулярку, и вывести код построчно, я бы так не сумел Афигеть, зайди на этот баш, открой исходный код страницы и посмотри что начальный тэг тела документа выглядит: <body style="margin: 0px;"> Поэтому тэг СПЕЦИАЛЬНО не закрыт
"Эт имба код - прогнать через жадную регулярку, и вывести код построчно, я бы так не сумел" Зато рабочий "Вы опасны для моего мозга" Конечно, неприятно осознавать, когда тебе знаниями по мозгам надавали Выкладывай хоть какую-то свою рабочую не " имба" версию, ламота)) ЗЫЖ Развелось псевдо-спецов. Лично тебе помогать больше не буду, если ты так просишь. Ему рабочий код дали - а оно тут пузыри пускает сидит. Ппц. Извините, простите, что выложил вас вероятно не самое оптимальное решение вашей проблемы. Больше не повторится "Афигеть, зайди на этот баш" Молодой человек, если вы ничего не понимаете в регулярках, то лучше не выё, в тот момент мне конкретно на баш уже было пох. А ваш вариант - $patern = '|<body(.*)</body>|Ui'; полный бред
Постараюсь все-таки объяснить, что Вы биплан (самолет такой убогий) Начнем - в быдлокоде, что Вы предложили последним. С помощью жадной регулярки получаете массив. Элемент $result[0][0] содержащий ВСЮ переменную $in. (Если у вас вдруг установлен PHP можете это проверить) Дальше вы разбиваете этот массив и выводите все не пустые строки. Но ояебу, можно было бы написать echo $in; результат был бы тот же. Заметьте, я объяснил в чем вы не правы, и насколько вы не правы. При этом я не свел все это рассуждение, как вы - "моя твоя труба качал". Прежде чем что-то, кому-то советовать, проверяйте все таки это у себя.