![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| Гость_Андрей |
|
|||
|
Unregistered |
Подскажите при помощи каких регулярных выражений можно сотворить следующее
имеем некий 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 |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: нет Всего: 44 |
сдесь наверное лутше воспользоваться index
Добавлено @ 07:55 или каким-нибудь HTML paresr'ом |
|||
|
||||
| Burdin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 5.7.2005 Где: Сахалин Репутация: нет Всего: нет |
непонял!!!!
если можно то поподробней |
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
А я не понял, что именно нужно вырезать???
-------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| Burdin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 5.7.2005 Где: Сахалин Репутация: нет Всего: нет |
имеем html файл в нем надо вырезать ту информацию которая находится в промежутке от:
<div class=type><b>Relib</b><a name="Relib"> до: </table></td><td></td></tr> и содержимое которое находится между этими данными нужно сохранить и работать с ними дальше |
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
Вообще-то было бы не плохо знать, что мы ищем, текст, цифры и т.п. Вот такой вариант попробуй:
В результате массив @res, будет иметь все подстроки, которые находятся между теми тегами, которые ты указал. -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| Usya |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 7.6.2005 Репутация: нет Всего: нет |
--------------------
Я не волшебник, я только учусь... |
|||
|
||||
| Burdin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 5.7.2005 Где: Сахалин Репутация: нет Всего: нет |
Пасиба!!!
|
|||
|
||||
| SantaXP |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 95 Регистрация: 5.6.2003 Репутация: нет Всего: нет |
Разу уж тема так называется, то не стал создавать отдельную тему.
---- Мне крайне нужно создать проверку переменных ($nick, $password, $repeat_password, $email) на наличие лишь знаков a-zA-z и 0-9 (в случае с $email + @) при скрипте регистрации посетителя, но поскольку я в регулрных выражениях вечно путаюсь, то ничего толкового сделать не могу. |
|||
|
||||
| Burdin |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 5.7.2005 Где: Сахалин Репутация: нет Всего: нет |
Добавлено @ 01:04
|
||||
|
|||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
Зачем так много скобок? Ты же не используешь эти переменные.
-------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| Usya |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 7.6.2005 Репутация: нет Всего: нет |
Кстати, можно и топорным способом через временную переменную (чтоб не портить первоначальную):
Результат либо "k" (для простой переменной), либо "[email protected]" или "[email protected]" для мыла... Должно сработать --------------------
Я не волшебник, я только учусь... |
|||
|
||||
| sharq |
|
||||
![]() Perl Liker ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 13.12.2004 Где: Ростов-на-Дону Репутация: 2 Всего: 28 |
SantaXP вот собственно:
Здесь $req - флаг, определяющий, что поле является необходимым для отображения, $comm = номер сообщения об ошибке, $check_errors - флаг, определяющий наличие ошибок. $name - название поля, $value - значение поля. Функция get_item - выбирает записи из БД. Вот функции:
Это сообщение отредактировал(а) sharq - 7.7.2005, 19:01 -------------------- [color=gray]There's More Than One Way To Do It[/color] |
||||
|
|||||
| SantaXP |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 95 Регистрация: 5.6.2003 Репутация: нет Всего: нет |
Burdin
Спасибо. Пример с e-mail работает, а вот выражение с проверкой на различные символы, которые нужно вырезать написано неправильно, ибо выдаёт у меня ошибку. ---------- sharq Спасибо огромное за проделанную вами работу, но вычленяя из написанного вами нужное мне я немного запутался. Ибо мне надо лишь выражение, чтобы в логине и пароле кроме a-zA-Z0-9_ ничего не было, а когда я пишу:
то он лишь проверяет, чтобы один из знаков написаееых выше попадался ему на глазе, а мне надо, чтобы там были только эти знаки, а вот как это сделать понять пока не могу... |
|||
|
||||
| sharq |
|
||||
![]() Perl Liker ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 13.12.2004 Где: Ростов-на-Дону Репутация: 2 Всего: 28 |
SantaXP сравни две строки
Видишь разницу - она большая!!! Твой случай проверяет, чтобы логин начинался с символа приведенного множества... Почитай основы регулярных выражений, например, в книге Изучаем Perl/ Реально, ничего сложного там нет. Это сообщение отредактировал(а) sharq - 8.7.2005, 00:13 -------------------- [color=gray]There's More Than One Way To Do It[/color] |
||||
|
|||||
| Burdin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 5.7.2005 Где: Сахалин Репутация: нет Всего: нет |
SantaXP
у тебя выдает ошибку потому-что
|
|||
|
||||
| korob2001 |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
SantaXP - Потому что, нужно писать читабельный код, что бы в нём разобраться, ниже я отформатировал твой код, теперь сравни: В каком варианте код легче читать да и вообще поддерживать его? В данном коде:
вообще нужно написать это выражение так:
У него же условие стоит такое: если строка состоит из данных символов, все ОК, если нет - проблема. Потому отрицание здесь не нужно, а так же необходим +, так как мы же проверяем не только первый символ, для полноты ещё и символ конца строки. Удачи. Это сообщение отредактировал(а) korob2001 - 8.7.2005, 05:09 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||||
|
|||||||
| Burdin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 5.7.2005 Где: Сахалин Репутация: нет Всего: нет |
а как тогда проверить на все запрещенные символы
|
|||
|
||||
| korob2001 |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
Если встретятся символы, которые мы не указали, условие вернёт TRUE, значит ошибка. Т.е. если бы у него была проверка такого плана: если в строке обнаружен недопустимый символ, значит ОШИБКА, если в строке все символы допустимы - значит всё ОК. Тогда это условие будет выглядеть так:
В его же случае оно должно выглядеть так:
Это сообщение отредактировал(а) korob2001 - 8.7.2005, 05:25 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||||
|
|||||||
| Burdin |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 5.7.2005 Где: Сахалин Репутация: нет Всего: нет |
ну и что получается в твоем варианте пропускает а в моем нет
Вот ответ:
|
||||
|
|||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
Уже подправил, посмотри последнее сообщение ещё раз.
-------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
Хотя наверное отрицание, будет выглядеть более разумным если записатьего так:
Теперь если отрицание не нужно, достаточно только заменить unless на if -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| Burdin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 5.7.2005 Где: Сахалин Репутация: нет Всего: нет |
ну вот ты мне обьясни на этом примере???
почему в первом говорит All in normal! а во втором Go fuck yourself! |
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
-------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| sharq |
|
||||
![]() Perl Liker ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 13.12.2004 Где: Ростов-на-Дону Репутация: 2 Всего: 28 |
Что-то вы здесь пургу развели...
Что это за логин: с пробелами и русскими буквами??? Хотя смотря какая задача стоит... Вот аффтору нужно наличие только латинских букв, цифр и _. Всё! Никаких пробелов и русских букв тем более!!! Для логина и пароля:
Для мыла я уже писал, еще раз:
Какие еще могут быть проблемы? -------------------- [color=gray]There's More Than One Way To Do It[/color] |
||||
|
|||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
sharq - да мы тут о регулярных выражениях поговорили.
-------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| SantaXP |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 95 Регистрация: 5.6.2003 Репутация: нет Всего: нет |
sharq
Хе... Именно её я и перечитываю постоянно... |
|||
|
||||
| sharq |
|
|||
![]() Perl Liker ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 13.12.2004 Где: Ростов-на-Дону Репутация: 2 Всего: 28 |
А я читаю и понять не могу, о чем посты.
SantaXP разабрался? -------------------- [color=gray]There's More Than One Way To Do It[/color] |
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
sharq - смысл у этих постов ничуть не меньше, чем в тех постах, конторые написал ты. Про E-mail я вообще молчу, потому как следующие адреса, твоё выражение очень даже пропустит:
[email protected] [email protected] ----------@------------ru -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| sharq |
|
|||
![]() Perl Liker ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 13.12.2004 Где: Ростов-на-Дону Репутация: 2 Всего: 28 |
korob2001 да спасибо за косяк, но твой вариант не прокатит, т.к. в моей проверке проверяется еще первый символ. Если заменить первый сивол на любой, то надо исправлять...
НО потестил на mail'e и такие варианты хляют: [email protected] [email protected] [email protected] Самоге главное чтобы не начиналась с точки, _, - и не заканчивались точкой или _. Так что в моем варианте проверки скрипта необходимо исправить проверку домена и последнего символа в имени. Вот такие пока хляют: [email protected] [email protected] Но на самом деле в своей регистрации я отсылаю письмо на мыло, если ввели несуществующий адрес, то полная регистрация произведена не будет.
все-таки обижаться не стоит -------------------- [color=gray]There's More Than One Way To Do It[/color] |
|||
|
||||
| korob2001 |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
Что значит мой вариант??? Я пока никаких вариантов, по поводу E-mail не выкладывал. Вот тебе тестовый код, с твоим регулярным выражением, никакой первый символ не проверяется:
Если ты мел вииду это: ^ , то здесь первым символом может быль любой из перечисленных в квадратных скобках, это может быть и точка и подчёркивание и т.д. Вот так проверяю я E-mail, но задесь только регулярка, я же как правило таким выражением очищаю переменную, если это возможно, так как всегда использую -T.
Удачи. ЗЫ: только не думай, что я хочу выделиться, просто регулярки очень обманчивы и в них легко ошибиться. Я например тоже очень часто допускаю ошибки в них. Это не для того, что бы показать, что я умнее или наоборот. Ты очень даже не плохо знаешь Perl, я это вижу, просто в данном случае ты ошибся. Вот и всё. Не принимай на свой счёт. Это сообщение отредактировал(а) korob2001 - 9.7.2005, 13:46 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||
|
|||||
| sharq |
|
||||||||
![]() Perl Liker ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 13.12.2004 Где: Ростов-на-Дону Репутация: 2 Всего: 28 |
korob2001
смотри на первой странице мой пост с проверкой и функцией korob2001 прочти мой предыдущий пост на странице 2 про тестирование вариантов на mail.ru и протестируй на своем примере.
блин, да все окей, даже проблем быть не может. respect. -------------------- [color=gray]There's More Than One Way To Do It[/color] |
||||||||
|
|||||||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
Спасибо за понимание, просто многие так и считают, хотя я их и понимаю, тоже в своё время был таким. -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| SantaXP |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 95 Регистрация: 5.6.2003 Репутация: нет Всего: нет |
Так, ок:
Это проверка работает, но, если написать так:
То всё меняется местами (то есть значение True и False). Почему так??? ------ И ещё один ламерский вопрос, мне надо, чтобы логин был не менее 3-х знаков, я пишу:
Однако тогда проверка не пашет вообще... ------- И последний маленький вопросик, какую книгу или статью вы посоветуете, чтобы разобраться в тонкостях регулярных выражений, а то я их даже из книги "Изучаем PERL" понять не могу??? |
||||||
|
|||||||
| korob2001 |
|
||||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
А это зачем?
Исправь:
Если проверка максимального значения не нужна, тогда это выражение будет выглядеть так:
"Программирование на Perl", "Perl - библиотека программиста", "Perl - специальный справочник". Последнюю посмотри, я где-то выкладывал полную версию в электронном виде. Если не найдёшь, то дай знать, выложу ещё раз. Удачи. -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||||||||||
|
|||||||||||||
| Burdin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 5.7.2005 Где: Сахалин Репутация: нет Всего: нет |
а как тогда проверить на содержание в ней только а-яА-Яa-zA-Z0-9_
подскажите |
|||
|
||||
| chaos |
|
||||||||||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: нет Всего: 44 |
читайте rfc-822 PS да и вообще врядли можно написать такое регулярное выражение для проверки валидности почтового адреса PSS а если и можно то он будет очень и очень большой длины Это сообщение отредактировал(а) chaos - 11.7.2005, 12:41 |
||||||||||
|
|||||||||||
| Guest |
|
|||
|
Unregistered |
Burdin
Таже тема, только в профиль. Должно быть так, код не проверял у себя на сервере. |
|||
|
||||
| Burdin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 5.7.2005 Где: Сахалин Репутация: нет Всего: нет |
а количество символов????? |
|||
|
||||
| korob2001 |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
chaos - Что касается таких товарищей, у которых адреса такого плана: mybox.mail, то таких кренделей очень мало и это их трудности.
Burdin - смотри выше, я уже тебе привёл примеры того, как проверить кол-во символов прямо в регулярном выражении.
Так же, но стоит подключить прагму locale и вполне возможно модуль POSIX Это сообщение отредактировал(а) korob2001 - 12.7.2005, 09:26 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||||
|
|||||||
| sharq |
|
||||||
![]() Perl Liker ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 13.12.2004 Где: Ростов-на-Дону Репутация: 2 Всего: 28 |
SantaXP качай доку по регекспу здесь.
chaos
Вот вариант Т. Кристиансена, может слышал о таком .)
korob2001
у меня без прагмы locale работает, но попробовать стоит. -------------------- [color=gray]There's More Than One Way To Do It[/color] |
||||||
|
|||||||
| korob2001 |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
sharq - у меня работает только с use locale, а некоторым и она не помогает и нужно напрямую подключать POSIX. Эта тема уже была здесь, только я не помню как называется. Вобщем я пишу всегда просто:
Тут и начался спор, что нужно подключать ещё и POSIX, т.е. так:
Может для надёжности лучше так и делать, хотя по идее locale делает это, она для того и предназначена. -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||||
|
|||||||
| SantaXP |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 95 Регистрация: 5.6.2003 Репутация: нет Всего: нет |
2sharq
Спасибо, скачал, буду изучать! ---- 2korob2001 Можно чуть-чуть поподробней о locale? Что это за зверь, что он делает и с чем едят? |
|||
|
||||
| korob2001 |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
SantaXP - эта прагма заставляет компилятор включить национальные установки из POSIX. Необходимо это в том случае, если тебе к примеру нужно перевести регистр или осуществить поиск с учётом языковой среды.
Вот тебе простой пример:
Попробуй запустить. Скорее всего, после запуска этого кода, ничего так и не произойдёт, строка так и останется такой же "вАсЯ". А теперь попробуй раскоментировать use locale и запусти пример снова. Результат должен быть таким "Вася". Эта прагма является с лексической областью видимости, а так же есть способ отключить её, no locale. Вот написал пример, который полностью всё это демострирует, подробности читай в коментариях:
После первой попытки должен быть такой результат:
После второй попытки:
После третьей попытки:
Это сообщение отредактировал(а) korob2001 - 24.8.2005, 06:20 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||||||||
|
|||||||||||
![]()
|
| Правила форума "Perl: CGI программирование" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: разработка для Web | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |