| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: разработка для Web > регулярные выражения |
| Автор: Гость_Андрей 5.7.2005, 07:29 |
| Подскажите при помощи каких регулярных выражений можно сотворить следующее имеем некий html текст в нем имеется строка: ........<div class=type><b>Relib</b><a name="Relib">..........-> ->..........</table></td><td></td></tr>....................... каким выражением мне их вырезать в пределах от: <div class=type><b>Relib</b><a name="Relib"> до: </table></td><td></td></tr> Заранее Спасибо за подсказочки |
| Автор: chaos 5.7.2005, 07:53 |
| сдесь наверное лутше воспользоваться index Добавлено @ 07:55 или каким-нибудь HTML paresr'ом |
| Автор: Burdin 5.7.2005, 08:44 |
| непонял!!!! если можно то поподробней |
| Автор: korob2001 5.7.2005, 09:00 |
| А я не понял, что именно нужно вырезать??? |
| Автор: Burdin 5.7.2005, 09:08 |
| имеем html файл в нем надо вырезать ту информацию которая находится в промежутке от: <div class=type><b>Relib</b><a name="Relib"> до: </table></td><td></td></tr> и содержимое которое находится между этими данными нужно сохранить и работать с ними дальше |
| Автор: korob2001 5.7.2005, 09:21 | ||
Вообще-то было бы не плохо знать, что мы ищем, текст, цифры и т.п. Вот такой вариант попробуй:
В результате массив @res, будет иметь все подстроки, которые находятся между теми тегами, которые ты указал. |
| Автор: Usya 5.7.2005, 18:59 |
| Кстати, посмотри еще http://www.webcode.ru/re/table/ Думаю, что пригодится |
| Автор: Burdin 6.7.2005, 00:48 |
| Пасиба!!! |
| Автор: SantaXP 7.7.2005, 00:17 |
| Разу уж тема так называется, то не стал создавать отдельную тему. ---- Мне крайне нужно создать проверку переменных ($nick, $password, $repeat_password, $email) на наличие лишь знаков a-zA-z и 0-9 (в случае с $email + @) при скрипте регистрации посетителя, но поскольку я в регулрных выражениях вечно путаюсь, то ничего толкового сделать не могу. |
| Автор: Burdin 7.7.2005, 00:59 | ||||
Добавлено @ 01:04
|
| Автор: korob2001 7.7.2005, 02:26 |
| Зачем так много скобок? Ты же не используешь эти переменные. |
| Автор: Usya 7.7.2005, 07:52 | ||
Кстати, можно и топорным способом через временную переменную (чтоб не портить первоначальную):
Результат либо "k" (для простой переменной), либо "k@k.k" или "k@k.k.k" для мыла... Должно сработать |
| Автор: sharq 7.7.2005, 18:43 | ||||
SantaXP вот собственно:
Здесь $req - флаг, определяющий, что поле является необходимым для отображения, $comm = номер сообщения об ошибке, $check_errors - флаг, определяющий наличие ошибок. $name - название поля, $value - значение поля. Функция get_item - выбирает записи из БД. Вот функции:
|
| Автор: SantaXP 7.7.2005, 23:48 | ||
| Burdin Спасибо. Пример с e-mail работает, а вот выражение с проверкой на различные символы, которые нужно вырезать написано неправильно, ибо выдаёт у меня ошибку. ---------- sharq Спасибо огромное за проделанную вами работу, но вычленяя из написанного вами нужное мне я немного запутался. Ибо мне надо лишь выражение, чтобы в логине и пароле кроме a-zA-Z0-9_ ничего не было, а когда я пишу:
то он лишь проверяет, чтобы один из знаков написаееых выше попадался ему на глазе, а мне надо, чтобы там были только эти знаки, а вот как это сделать понять пока не могу... |
| Автор: sharq 8.7.2005, 00:11 | ||||
SantaXP сравни две строки
Видишь разницу - она большая!!! Твой случай проверяет, чтобы логин начинался с символа приведенного множества... Почитай основы регулярных выражений, например, в книге Изучаем Perl/ Реально, ничего сложного там нет. |
| Автор: Burdin 8.7.2005, 00:53 | ||
| SantaXP у тебя выдает ошибку потому-что
|
| Автор: korob2001 8.7.2005, 05:02 | ||||||
SantaXP - Потому что, нужно писать читабельный код, что бы в нём разобраться, ниже я отформатировал твой код, теперь сравни: В каком варианте код легче читать да и вообще поддерживать его? В данном коде:
вообще нужно написать это выражение так:
У него же условие стоит такое: если строка состоит из данных символов, все ОК, если нет - проблема. Потому отрицание здесь не нужно, а так же необходим +, так как мы же проверяем не только первый символ, для полноты ещё и символ конца строки. Удачи. |
| Автор: Burdin 8.7.2005, 05:09 |
| а как тогда проверить на все запрещенные символы |
| Автор: korob2001 8.7.2005, 05:09 | ||||||
Если встретятся символы, которые мы не указали, условие вернёт TRUE, значит ошибка. Т.е. если бы у него была проверка такого плана: если в строке обнаружен недопустимый символ, значит ОШИБКА, если в строке все символы допустимы - значит всё ОК. Тогда это условие будет выглядеть так:
В его же случае оно должно выглядеть так:
|
| Автор: Burdin 8.7.2005, 05:31 | ||||
ну и что получается в твоем варианте пропускает а в моем нет
Вот ответ:
|
| Автор: korob2001 8.7.2005, 05:32 |
| Уже подправил, посмотри последнее сообщение ещё раз. |
| Автор: korob2001 8.7.2005, 05:48 | ||
Хотя наверное отрицание, будет выглядеть более разумным если записатьего так:
Теперь если отрицание не нужно, достаточно только заменить unless на if |
| Автор: Burdin 8.7.2005, 05:53 | ||
ну вот ты мне обьясни на этом примере???
почему в первом говорит All in normal! а во втором Go fuck yourself! |
| Автор: korob2001 8.7.2005, 07:04 | ||
|
| Автор: sharq 8.7.2005, 09:42 | ||||
| Что-то вы здесь пургу развели... Что это за логин: с пробелами и русскими буквами??? Хотя смотря какая задача стоит... Вот аффтору нужно наличие только латинских букв, цифр и _. Всё! Никаких пробелов и русских букв тем более!!! Для логина и пароля:
Для мыла я уже писал, еще раз:
Какие еще могут быть проблемы? |
| Автор: korob2001 8.7.2005, 15:08 |
| sharq - да мы тут о регулярных выражениях поговорили. |
| Автор: SantaXP 8.7.2005, 23:32 |
| sharq Хе... Именно её я и перечитываю постоянно... |
| Автор: sharq 9.7.2005, 00:13 |
| А я читаю и понять не могу, о чем посты. SantaXP разабрался? |
| Автор: korob2001 9.7.2005, 08:08 |
| sharq - смысл у этих постов ничуть не меньше, чем в тех постах, конторые написал ты. Про E-mail я вообще молчу, потому как следующие адреса, твоё выражение очень даже пропустит: ............@................ru ---------@................ru ----------@------------ru |
| Автор: sharq 9.7.2005, 13:16 | ||
| korob2001 да спасибо за косяк, но твой вариант не прокатит, т.к. в моей проверке проверяется еще первый символ. Если заменить первый сивол на любой, то надо исправлять... НО потестил на mail'e и такие варианты хляют: q--------@mail.ru q........w@mail.ru q_____s@mail.ru Самоге главное чтобы не начиналась с точки, _, - и не заканчивались точкой или _. Так что в моем варианте проверки скрипта необходимо исправить проверку домена и последнего символа в имени. Вот такие пока хляют: mail@---.ru mail@....ru Но на самом деле в своей регистрации я отсылаю письмо на мыло, если ввели несуществующий адрес, то полная регистрация произведена не будет.
все-таки обижаться не стоит |
| Автор: korob2001 9.7.2005, 13:35 | ||||
Что значит мой вариант??? Я пока никаких вариантов, по поводу E-mail не выкладывал. Вот тебе тестовый код, с твоим регулярным выражением, никакой первый символ не проверяется:
Если ты мел вииду это: ^ , то здесь первым символом может быль любой из перечисленных в квадратных скобках, это может быть и точка и подчёркивание и т.д. Вот так проверяю я E-mail, но задесь только регулярка, я же как правило таким выражением очищаю переменную, если это возможно, так как всегда использую -T.
Удачи. ЗЫ: только не думай, что я хочу выделиться, просто регулярки очень обманчивы и в них легко ошибиться. Я например тоже очень часто допускаю ошибки в них. Это не для того, что бы показать, что я умнее или наоборот. Ты очень даже не плохо знаешь Perl, я это вижу, просто в данном случае ты ошибся. Вот и всё. Не принимай на свой счёт. |
| Автор: sharq 9.7.2005, 14:44 | ||||||||
korob2001
смотри на первой странице мой пост с проверкой и функцией korob2001 прочти мой предыдущий пост на странице 2 про тестирование вариантов на mail.ru и протестируй на своем примере.
блин, да все окей, даже проблем быть не может. respect. |
| Автор: korob2001 9.7.2005, 21:47 | ||
Спасибо за понимание, просто многие так и считают, хотя я их и понимаю, тоже в своё время был таким. |
| Автор: SantaXP 10.7.2005, 02:06 | ||||||
Так, ок:
Это проверка работает, но, если написать так:
То всё меняется местами (то есть значение True и False). Почему так??? ------ И ещё один ламерский вопрос, мне надо, чтобы логин был не менее 3-х знаков, я пишу:
Однако тогда проверка не пашет вообще... ------- И последний маленький вопросик, какую книгу или статью вы посоветуете, чтобы разобраться в тонкостях регулярных выражений, а то я их даже из книги "Изучаем PERL" понять не могу??? |
| Автор: korob2001 10.7.2005, 22:43 | ||||||||||||
А это зачем?
Исправь:
Если проверка максимального значения не нужна, тогда это выражение будет выглядеть так:
"Программирование на Perl", "Perl - библиотека программиста", "Perl - специальный справочник". Последнюю посмотри, я где-то выкладывал полную версию в электронном виде. Если не найдёшь, то дай знать, выложу ещё раз. Удачи. |
| Автор: Burdin 11.7.2005, 08:44 |
| а как тогда проверить на содержание в ней только а-яА-Яa-zA-Z0-9_ подскажите |
| Автор: chaos 11.7.2005, 12:39 | ||||||||||
читайте rfc-822 PS да и вообще врядли можно написать такое регулярное выражение для проверки валидности почтового адреса PSS а если и можно то он будет очень и очень большой длины |
| Автор: Guest 11.7.2005, 12:48 | ||
Burdin
Таже тема, только в профиль. Должно быть так, код не проверял у себя на сервере. |
| Автор: Burdin 12.7.2005, 00:53 |
| а количество символов????? |
| Автор: korob2001 12.7.2005, 09:23 | ||||||
chaos - Что касается таких товарищей, у которых адреса такого плана: mybox.mail, то таких кренделей очень мало и это их трудности.
Burdin - смотри выше, я уже тебе привёл примеры того, как проверить кол-во символов прямо в регулярном выражении.
Так же, но стоит подключить прагму locale и вполне возможно модуль POSIX |
| Автор: sharq 13.7.2005, 00:39 | ||||||
| SantaXP качай доку по регекспу http://vingrad.ru/download/perl/regexp2-ref.pdf. chaos
Вот вариант Т. Кристиансена, может слышал о таком .)
korob2001
у меня без прагмы locale работает, но попробовать стоит. |
| Автор: korob2001 13.7.2005, 01:41 | ||||||
sharq - у меня работает только с use locale, а некоторым и она не помогает и нужно напрямую подключать POSIX. Эта тема уже была здесь, только я не помню как называется. Вобщем я пишу всегда просто:
Тут и начался спор, что нужно подключать ещё и POSIX, т.е. так:
Может для надёжности лучше так и делать, хотя по идее locale делает это, она для того и предназначена. |
| Автор: SantaXP 23.8.2005, 23:48 |
| 2sharq Спасибо, скачал, буду изучать! ---- 2korob2001 Можно чуть-чуть поподробней о locale? Что это за зверь, что он делает и с чем едят? |
| Автор: korob2001 24.8.2005, 05:33 | ||||||||||
| SantaXP - эта прагма заставляет компилятор включить национальные установки из POSIX. Необходимо это в том случае, если тебе к примеру нужно перевести регистр или осуществить поиск с учётом языковой среды. Вот тебе простой пример:
Попробуй запустить. Скорее всего, после запуска этого кода, ничего так и не произойдёт, строка так и останется такой же "вАсЯ". А теперь попробуй раскоментировать use locale и запусти пример снова. Результат должен быть таким "Вася". Эта прагма является с лексической областью видимости, а так же есть способ отключить её, no locale. Вот написал пример, который полностью всё это демострирует, подробности читай в коментариях:
После первой попытки должен быть такой результат:
После второй попытки:
После третьей попытки:
|