Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Perl - Регулярные выражения / Regexpы

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6

Открыть новую тему     Написать ответ в эту тему

OLEX



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Смежная тема
регулярные выражения в Perl
 
 
Было

Всего записей: 3591 | Зарегистр. 09-07-2002 | Отправлено: 03:52 30-08-2005 | Исправлено: Cheery, 18:37 27-02-2008
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
$text =~ s/\[img\](.+?)_small(\..+)\[\/img\]/<a href=\"$1$2\" target=\"_blank\"><img src=\"$1_small$2\"><br>Кликните для просмотра в полный размер<\/a>/isg;

что то такое - не проверял
возможно _ в регулярке придется писать как \_

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:26 27-02-2008 | Исправлено: Cheery, 22:26 27-02-2008
YourAdmin



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Не смог адаптировать твой код под свою проблему
 
Нужно, чтобы под такой текст:
 
[img]http://localhost/uploads/1/a/1a078717278c8b225f13393c59fab457.jpg[/img]
 
 
Выводилось:
 
<img src="http://localhost/uploads/1/a/1a078717278c8b225f13393c59fab457.jpg">  
 
 
А под такой:
 
[img]http://localhost/uploads/1/a/1a078717278c8b225f13393c59fab457_small.jpg[/img]
 
 
Выводилось:
 
<a href="http://localhost/uploads/1/a/1a078717278c8b225f13393c59fab457.jpg"><img src="http://localhost/uploads/1/a/1a078717278c8b225f13393c59fab457_small.jpg"> </a>
 
 
Помоги, пожалуйста.

Всего записей: 156 | Зарегистр. 08-12-2001 | Отправлено: 01:53 03-03-2008
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YourAdmin
я же написал все.. в чем проблема то?
 
одна замена  
$text =~ s/\[img\](.+?)_small(\..+)\[\/img\]/<a href=\"$1$2\" target=\"_blank\"><img src=\"$1_small$2\"><br>Кликните для просмотра в полный размер<\/a>/isg;
затем вторая - переводит все оставшееся
$text =~ s/\[img\](.+?)\[\/img\]/<img src=\"$1\">/isg;  
 
 
что не работает то?

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:56 03-03-2008
YourAdmin



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Да, я достиг примерно тоже самое.
Вот что получаем после переваривания вот таких кодов (первый ок, второй - болт):
 
 
[img]http://localhost/uploads/1/a/1a078717278c8b225f13393c59fab457_small.jpg[/img]
 
==
 
<a href="http://localhost/uploads/1/a/1a078717278c8b225f13393c59fab457.jpg" target="_blank"><img src="http://localhost/uploads/1/a/1a078717278c8b225f13393c59fab457_small.jpg"><br>Кликните для просмотра в полный размер</a>
 
 
 
 
 
 
 
 
 
 
 
[img]http://localhost/uploads/1/a/1a078717278c8b225f13393c59fab457.jpg[/img]
[img]http://localhost/uploads/1/a/1a078717278c8b225f13393c59fab457_small.jpg[/img]
 
==
 
<a href="http://localhost/uploads/1/a/1a078717278c8b225f13393c59fab457.jpg[/img]<br><br><img src="http://localhost/uploads/1/a/1a078717278c8b225f13393c59fab457.jpg" target="_blank"><img src="http://localhost/uploads/1/a/1a078717278c8b225f13393c59fab457.jpg"><br><br>[img]http://localhost/uploads/1/a/1a078717278c8b225f13393c59fab457_small.jpg"><br>Кликните для просмотра в полный размер</a>

Всего записей: 156 | Зарегистр. 08-12-2001 | Отправлено: 02:22 03-03-2008
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YourAdmin

Цитата:
Да, я достиг примерно тоже самое.
Вот что получаем после переваривания вот таких кодов (первый ок, второй - болт):  

чего достигли, блин? это два преобразования примененные один за другим.
первый преобразует ссылки с _small, второе все то, что останется
я же написал.. сначала первое, затем второе.


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 02:28 03-03-2008
YourAdmin



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Я так и делаю )
Но, как видишь, болт!
 
Сейчас в скрипте вот так (то что я пробовал - закомменчено, тоже самое по сути, но расширение тока jpg):
 
 
#$text =~ s/\[img\](.+)_small.jpg\[\/img\]/<img src=\"$1_small.jpg\" border=\"0\">/isg;
#$text =~ s/\[img\](.+?)\[\/img\]/<img src=\"$1\" border=\"0\">/isg;
 
$text =~ s/\[img\](.+?)_small(\..+)\[\/img\]/<a href=\"$1$2\" target=\"_blank\"><img src=\"$1_small$2\"><br>Кликните для просмотра в полный размер<\/a>/isg;  
$text =~ s/\[img\](.+?)\[\/img\]/<img src=\"$1\">/isg;  
 
 
Результат в предыдущем сообщении. Я тоже удивляюсь почему так происходит.
 
Добавлено:
Вот что остается если закомментить последнюю строку, т.е. сделать вот так:

Код:
 
$text =~ s/\[img\](.+?)_small(\..+)\[\/img\]/<a href=\"$1$2\" target=\"_blank\"><img src=\"$1_small$2\"><br>Кликните для просмотра в полный размер<\/a>/isg;  
#$text =~ s/\[img\](.+?)\[\/img\]/<img src=\"$1\">/isg;  
 
 
 
 
 
На текст:
[img]http://localhost/uploads/d/2/d2e5b7befffbd3a247c32d70512396cd.jpg[/img]
 
[img]http://localhost/uploads/1/a/1a078717278c8b225f13393c59fab457_small.jpg[/img]<br><br>
 
 
 
Мы получим:
 
<a href="http://localhost/uploads/d/2/d2e5b7befffbd3a247c32d70512396cd.jpg[/img]
 
[img]http://localhost/uploads/1/a/1a078717278c8b225f13393c59fab457.jpg" target="_blank"><img src="http://localhost/uploads/d/2/d2e5b7befffbd3a247c32d70512396cd.jpg[/img]
 
[img]http://localhost/uploads/1/a/1a078717278c8b225f13393c59fab457_small.jpg"><br>Кликните для просмотра в полный размер</a>
 
 
 
 
 
 

Всего записей: 156 | Зарегистр. 08-12-2001 | Отправлено: 02:41 03-03-2008 | Исправлено: YourAdmin, 02:51 03-03-2008
YourAdmin



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Понял почему так происходит.
Первая регулярка захватывает из текста:
 
[img]http://localhost/uploads/d/2/d2e5b7befffbd3a247c32d70512396cd.jpg[/img]  
 
[img]http://localhost/uploads/1/a/1a078717278c8b225f13393c59fab457_small.jpg[/img]
 
 
 
 
 
Фрагмент:
http://localhost/uploads/d/2/d2e5b7befffbd3a247c32d70512396cd.jpg[/img]  
[img]http://localhost/uploads/1/a/1a078717278c8b225f13393c59fab457_small.jpg
 
 
который попадает под маску [img]_small.*[/img]
 
 
 
 
 
Нужно теперь запретить в первой регулярке в теле (т.е. между  "[img]" и "[/img]") код "[/img]", как бы поизящнее это сделать? )
 
 
Напоминаю, код регулярок:

Код:
 
$text =~ s/\[img\](.+?)_small(\..+)\[\/img\]/<a href=\"$1$2\" target=\"_blank\"><img src=\"$1_small$2\"><br>Кликните для просмотра в полный размер<\/a>/isg;  
$text =~ s/\[img\](.+?)\[\/img\]/<img src=\"$1\">/isg;  
 

 
Добавлено:
Можно также, думаю, запретить пробел или перевод каретки.

Всего записей: 156 | Зарегистр. 08-12-2001 | Отправлено: 19:12 03-03-2008 | Исправлено: YourAdmin, 19:14 03-03-2008
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YourAdmin
давайте без флуда????  
надо сделать их "нежадными"..
в первом варианте изменить так
/\[img\](.+?)_small(\..+?)\[\/img\]/
 
если бы хоть чуть чуть подумали - догадались бы

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 19:48 03-03-2008
YourAdmin



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Cheery
Извините, пожалуйста, я не флужу, к форуму ру-борд и к вам лично отношусь с большим уважением.
 
Регулярка все равно жадничает.
 
 
 
$text = qq~
[img]http://localhost/uploads/d/2/d2e5b7befffbd3a247c32d70512396cd.jpg[/img]  
 
[img]http://localhost/uploads/1/a/1a078717278c8b225f13393c59fab457_small.jpg[/img]<br><br>
~;
 
$text =~ s/\[img\](.+?)_small(\..+?)\[\/img\]/<a href=\"$1$2\" target=\"_blank\"><img src=\"$1_small$2\"><br>Кликните для просмотра в полный размер<\/a>/isg;  
#$text =~ s/\[img\](.+?)\[\/img\]/<img src=\"$1\">/isg;    
 
print $text;
 
 
 
=======
 
 
 
<a href="http://localhost/uploads/d/2/d2e5b7befffbd3a247c32d70512396cd.jpg[/img]  
 
[img]http://localhost/uploads/1/a/1a078717278c8b225f13393c59fab457.jpg" target="_blank"><img src="http://localhost/uploads/d/2/d2e5b7befffbd3a247c32d70512396cd.jpg[/img]  
 
[img]http://localhost/uploads/1/a/1a078717278c8b225f13393c59fab457_small.jpg"><br>Кликните для просмотра в полный размер</a>
 
 
 

Всего записей: 156 | Зарегистр. 08-12-2001 | Отправлено: 01:19 04-03-2008
CheRt



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
YourAdmin, вы уверены в правильной последовательности обработки?
 
Сначала стоит пропарсить вставки вида  [img]http://localhost/uploads/d/2/d2e5b7befffbd3a247c32d70512396cd.jpg[/img]
затем уже
 [img]http://localhost/uploads/1/a/1a078717278c8b225f13393c59fab457_small.jpg[/img]
 
потому как даже если шаблон не жадный и сначала выполняется  
$text =~ s/\[img\](.+?)_small(\..+?)\[\/img\]/<a href=\"$1$2\" target=\"_blank\"><img src=\"$1_small$2\"><br>Кликните для просмотра в полный размер<\/a>/isg;
 
то может получится вот примерно такое:
[img](http://localhost/uploads/d/2/d2e5b7befffbd3a247c32d70512396cd.jpg[/img]
 [img]http://localhost/uploads/1/a/1a078717278c8b225f13393c59fab457)_(small.jpg)[/img]

----------
В огне бода нет и не будет!
До встречи в СССР 2.0!

Всего записей: 1118 | Зарегистр. 14-12-2001 | Отправлено: 14:44 04-03-2008 | Исправлено: CheRt, 14:50 04-03-2008
YourAdmin



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Так и происходит. Но если делать, как Вы говорите, то картинки вида *_small* также хаваются регуляркой обычных изображений, и опять - косяк )

Всего записей: 156 | Зарегистр. 08-12-2001 | Отправлено: 21:35 04-03-2008
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
если убрать модификатор s, то работает. правда не будет работать, если таг написан не в одну строчку
а почему регулярка "страдает жадностью" - непонятно.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 02:39 05-03-2008
CheRt



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
Так и происходит. Но если делать, как Вы говорите, то картинки вида *_small* также хаваются регуляркой обычных изображений, и опять - косяк )

Дык делайте первый шаблон с учетом .+?[^(_small\.)].+?

----------
В огне бода нет и не будет!
До встречи в СССР 2.0!

Всего записей: 1118 | Зарегистр. 14-12-2001 | Отправлено: 07:33 05-03-2008
YourAdmin



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Cheery
CheRt
Спасибо большое, вроде бы пришел к окончательному варианту:
 
 
$text =~ s/\[img\]\n?(.+?)_small(\..+?)\n?\[\/img\]/<a href=\"$1$2\" target=\"_blank\"><img src=\"$1_small$2\" border=\"0\"><br>Кликните для просмотра в полный размер<\/a>/ig;    
$text =~ s/\[img\](.+?)\[\/img\]/<img src=\"$1\">/isg;  
 
 

Цитата:
правда не будет работать, если таг написан не в одну строчку

C этим тоже поборолся с помощью "\n?"
 
 

Всего записей: 156 | Зарегистр. 08-12-2001 | Отправлено: 22:54 05-03-2008
YourAdmin



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Еще проблема )
Нужно проверить логин. Для начала:
Можно использовать:
1) Только латинские буквы
2) Цифры
3) Пробел и символ "_"
 
Далее хотелось бы модифицировать чтобы можно было использовать либо только латинские буквы + (2) + (3), либо только кириллицу + (2) + (3).
 
Не ожидал, что такой вопрос поставит на лопатки.
 
пробовал вот так
 
if ($a_login !~ /^[a-zA-Z0-9_\s]/) {
 print "Content-type:text/html\n\n";
 print "Болт";
 exit;
}
 
и много раз пробовал редактировать, не помогло. Допустим, на "asdfasdf" - не ругается, на "йцукыва" - ругается, на - "sdfфаввыап" - не ругается.
 
 
Попробовал выдрать код из IB 2.1.9, также не помогло.
 
$_ = $a_login;
if ((m/\b[_]/) || (m/_{2,}/) || (m/[_]\b/)) {  
 print "Content-type:text/html\n\n";
 print "Болт";
 exit;
  }  
unless (/^[\w\d\xB3\xE0-\xFF\xA3\xC0-\xDF\xA8\xC0-\xDF\xB8\xE0-\xFF\xF0\x80-\x9F\xF1\xA0-\xAF\xE0-\xEF\xA1\xB0-\xCF\xF1\xD0-\xEF\x80-\x9F\xA0-\xAF\xE0-\xEF\xDD\x80-\xDF\xDE\xE0-\xFE\xDF]+$/){  
 print "Content-type:text/html\n\n";
 print "Болт";
 exit;
      }  
 
 
 

Всего записей: 156 | Зарегистр. 08-12-2001 | Отправлено: 16:08 06-03-2008 | Исправлено: YourAdmin, 16:12 06-03-2008
CheRt



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
пробовал вот так
 
if ($a_login !~ /^[a-zA-Z0-9_\s]/) {
 print "Content-type:text/html\n\n";
 print "Болт";
 exit;
}  

 
латиница + цифры, пробел и _

Код:
 
if ($a_login !~ /^[a-zA-Z0-9_\s]+$/) {
 print "Content-type:text/html\n\n";
 print "Болт";
 exit;
}
 

 
кирилица + цифры, пробел _

Код:
 
/^[а-яА-Я0-9_\s]+$/
 

 
или
 

Код:
 
use locale;
 
...
 
/^[А-Я0-9_\s]+$/i
/^[A-Z0-9_\s]+$/i
 

 
правда если используется юникод и перл младше 5.8.0 - могут быть проблемы.

----------
В огне бода нет и не будет!
До встречи в СССР 2.0!

Всего записей: 1118 | Зарегистр. 14-12-2001 | Отправлено: 18:19 06-03-2008 | Исправлено: CheRt, 18:21 06-03-2008
YourAdmin



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
CheRt
Спасибо большое, сделал так:
 
 
if ($a_login !~ /^[a-zA-Z0-9_\s]+$/) {  
 print "Латиниццо бажит<br>";  
 $lat_error = 1;  
} else {print "По латинице прошел<br>";}
 
 
if (($lat_error) && ($a_login !~ /^[а-яА-Я0-9_\s]+$/)) {  
 print "Кирилиццо бажит";  
 exit;   # Если не проходит ни по латинице, ни по кириллице - выходим из программы
} elsif ($lat_error) {print "По кириллице прошел";}

Всего записей: 156 | Зарегистр. 08-12-2001 | Отправлено: 22:10 06-03-2008
arreke



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите, совсем запутался в этих выражениях.
Задача наипростейшая, является ли переменная $primer цифрой, или нет.
 

Код:
 
my $primer = "d123";
if ($primer != m/\d+/) { print "$primer - cifra" } else { print "$primer - ne cifra" }
 

 
явно где то ошибка, я в регулярных выражениях не силён, путаю постоянно.
помогите, очень нужно.

Всего записей: 98 | Зарегистр. 11-01-2007 | Отправлено: 23:44 11-03-2008
KADABRA



Великий покусатель
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
arreke

Цитата:
$primer != m/\d+/

$primer =~ m/^\d+$/
Проверяет состоит ли строка из одних только цифр или нет.

----------
Это не подпись.

Всего записей: 1718 | Зарегистр. 14-07-2003 | Отправлено: 00:00 12-03-2008 | Исправлено: KADABRA, 00:07 12-03-2008
arreke



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
2KADABRA,
спс, работает.

Всего записей: 98 | Зарегистр. 11-01-2007 | Отправлено: 05:21 12-03-2008
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6

Компьютерный форум Ru.Board » Интернет » Web-программирование » Perl - Регулярные выражения / Regexpы


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru