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

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

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

Cheery (13-01-2007 02:13): переезжаем сюда
Perl - Регулярные выражения
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

   

froM

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Выражение
 
$var =~ s/(\*){3,}?/$1/g;
 
Заменяет звездочки встречающиеся в $var более чем 3 раза на 3 звездочки, те, допустим на входе 5 или 8 или сколько угодно звездочек, а на выходе три.
 
Так вот, а как бы тоже самое сделать для любого символа вообще? Вариант с точкой в скобках не проходит.

Всего записей: 28 | Зарегистр. 12-04-2002 | Отправлено: 05:54 13-04-2002
Haze



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
$var =~ s/(.)\1{3,}/$1x3/eg;

----------
Прибалтам сюда! http://www.baltic.ee

Всего записей: 470 | Зарегистр. 20-05-2001 | Отправлено: 13:20 13-04-2002
froM

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо Haze, работает...
 
А не могли бы вы пояснить как это работает?
 
Вот это...
 
/(.)\1{3,}/
 

Всего записей: 28 | Зарегистр. 12-04-2002 | Отправлено: 14:33 13-04-2002
Haze



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

----------
Прибалтам сюда! http://www.baltic.ee

Всего записей: 470 | Зарегистр. 20-05-2001 | Отправлено: 14:59 13-04-2002 | Исправлено: Haze, 14:59 13-04-2002
lynx



Advanced lynx
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ой, можно мне тут спросить?
 
Меняется смайлик на картинку:
 
$$FPost =~ s/\b\;\)/<img src=\"$imagesurl\/emoticons\/default\/wink.gif\" border=\"0\">/g;
 
Это сейчас у меня так, а по дефолту шло так:
 
    $$FPost =~ s/\;\)/<img src=\"$imagesurl\/emoticons\/default\/wink.gif\" border=\"0\">/g;
 
Так вот что получается. Если написать такое сочетание:
")
(кавычка, закрывающаяся скобка)
то тоже меняется на смайлик
 
Как пофиксить?

Всего записей: 11712 | Зарегистр. 08-05-2001 | Отправлено: 05:23 01-11-2002
WebDi



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lynx
Может попробовать:
...=~s/(\b\;\))/<img....
А вообще не сталкивался.

Всего записей: 2228 | Зарегистр. 05-04-2002 | Отправлено: 09:17 01-11-2002
VolxV

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Скорее всего последовательность регекспов идет следующим образом:
 
1. двойная кавычка заменяется на &quot;
2. &quot; со скобкой заменяется на wink-овый смайлик ;)

Всего записей: 898 | Зарегистр. 01-06-2001 | Отправлено: 10:20 01-11-2002
lynx



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

Цитата:
Может попробовать:  
...=~s/(\b\;\))/<img....  

 
Дык, так и стоит же....  
 

Цитата:
1. двойная кавычка заменяется на &quot;

 
Походу так оно и есть... Но почему она заменяется? И как ее не заменять?

Всего записей: 11712 | Зарегистр. 08-05-2001 | Отправлено: 15:30 01-11-2002
DimoN



Tech administrator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lynx

Цитата:
Походу так оно и есть... Но почему она заменяется? И как ее не заменять?


Цитата:
=~ s/_\;\)/<img src=\"$imagesurl\/emoticons\/default\/wink.gif\" border=\"0\">/g;  

 
_ <<<---- это пробел
 
Добавлено
78787;) - тест

----------
Мы Баним с улыбкой :) ™

Всего записей: 7528 | Зарегистр. 19-04-2001 | Отправлено: 18:16 01-11-2002
lynx



Advanced lynx
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DimoN
 
Ну... это я поняла. Ладно, придется так оставить, но в таком виде код на смайлик не заменяется, если поставить смайла в начале строки.
Причем мне не понятно, почему не пашет при этом ни это:
 
s/^\;\)/<img
 
ни это:
 
s/\b\;\)/<img

Всего записей: 11712 | Зарегистр. 08-05-2001 | Отправлено: 18:26 01-11-2002
cabron666



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго времени суток!
Помогите пожалуйста с регулярным выражением, час уже мучаюсь, работает, но криво =~ /[^\d{4}\-\d{2}\-\d{2}]/
Нужно вывести ошибку, если введенное не соотвествует ЧЧЧЧ-ЧЧ-ЧЧ (где Ч это число)
Что я не так делаю?

----------
Жизнь - это рояль, клавиша белая, клавиша черная, крышка...

Всего записей: 1343 | Зарегистр. 03-02-2002 | Отправлено: 23:31 11-07-2004
Svarga

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

Цитата:
/[^\d{4}\-\d{2}\-\d{2}]/

скобки квадратные убирай — заработает...

Цитата:
m/^\d{4}-\d{2}-\d{2}$/


----------
away.

Всего записей: 4161 | Зарегистр. 25-06-2002 | Отправлено: 05:47 12-07-2004
cabron666



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Svarga
Может у меня уже крыша поехала, или еще что

Код:
 
print "chislo\n";
$chislo = <>;
chop $chislo;
if ($chislo =~ m/^\d{4}-\d{2}-\d{2}$/ ){
print "plohoy format";
}else{print "ok";}
 

Ввожу все угодно, что не есть ЧЧЧЧ-ЧЧ-ЧЧ получаю ок, а если ввожу 1111-11-11, получаю "плохой формат"
По-идее же наоборот должно быть?

----------
Жизнь - это рояль, клавиша белая, клавиша черная, крышка...

Всего записей: 1343 | Зарегистр. 03-02-2002 | Отправлено: 16:19 12-07-2004
Kokoc

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
if ($chislo !~ m/^\d{4}-\d{2}-\d{2}$/ ){  
   print "plohoy format";

Всего записей: 793 | Зарегистр. 06-06-2002 | Отправлено: 17:12 12-07-2004
cabron666



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Kokoc
Хм, странно, а для чего тогда нужна ^ ?

----------
Жизнь - это рояль, клавиша белая, клавиша черная, крышка...

Всего записей: 1343 | Зарегистр. 03-02-2002 | Отправлено: 22:28 12-07-2004
Svarga

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

Цитата:
print "chislo\n";  
$chislo = <>;  
chop $chislo;  
if ($chislo =~ m/^\d{4}-\d{2}-\d{2}$/ ){  
print "plohoy format";  
}else{print "ok";}  
 
 
Ввожу все угодно, что не есть ЧЧЧЧ-ЧЧ-ЧЧ получаю ок, а если ввожу 1111-11-11, получаю "плохой формат"  
По-идее же наоборот должно быть?

условные действия поменяй местами или как Kokoc заметил — !~m используй
а так оно проверяет, всё ли хорошо
 

Цитата:
Хм, странно, а для чего тогда нужна ^ ?

указывает на начало строки, $ — на конец

----------
away.

Всего записей: 4161 | Зарегистр. 25-06-2002 | Отправлено: 18:16 13-07-2004
Hibin

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

Цитата:
Хм, странно, а для чего тогда нужна ^ ?
 
указывает на начало строки, $ — на конец

 
Если быть точным, то, находясь в квадратных скобках - /...[^...].../, ^ указывает на необходимость отсутствия указанных символов, за пределами - /^...[...].../ - на начало строки, в которой производится поиск.

Всего записей: 270 | Зарегистр. 07-04-2003 | Отправлено: 18:57 13-07-2004 | Исправлено: Hibin, 19:02 13-07-2004
cabron666



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я думал что ^ является "не соотвестует"
Но все равно я не могу понять, имеем код:

Код:
 
if ($chtoto =~ /[^a-zA-Z]/){  
print "plohoy format";  
}else{print "ok";}
 

Ввожу пробел, цифру и тп получаю, как и должно "плохой формат"
Меняем шаблон на =~ /[^\d{3}]/
Значит, если мы введем что-то, что не соотвестует тремя цифрами, должны получить "плохой формат"? Вроде бы да, но нет, если ввести пять цифр получим "ок"

----------
Жизнь - это рояль, клавиша белая, клавиша черная, крышка...

Всего записей: 1343 | Зарегистр. 03-02-2002 | Отправлено: 20:35 13-07-2004
Cheery



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

Цитата:
if ($chtoto =~ /[^a-zA-Z]/){  


Цитата:
Но все равно я не могу понять, имеем код:  

[^символы] - не должно быть ни одного из символов..
a-zA-Z - ни одной буквы от A до Z в любом регистре.

Цитата:
Значит, если мы введем что-то, что не соотвестует тремя цифрами, должны получить "плохой формат"? Вроде бы да, но нет, если ввести пять цифр получим "ок"

наоборот.. все, что не соответствует 3 цифрам - нормально.. знак ^ в [] означает исключение. а вне [] означает начало строки.

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 20:37 13-07-2004 | Исправлено: Cheery, 20:39 13-07-2004
Hibin

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

Цитата:
Меняем шаблон на =~ /[^\d{3}]/  
Значит, если мы введем что-то, что не соотвестует тремя цифрами, должны получить "плохой формат"? Вроде бы да, но нет, если ввести пять цифр получим "ок"

Чтобы проверить строку на соответствие именно трем цифрам, нужно заменить его на =~ /^[\d{3}]$/, на несоответствие - !~ /^[\d{3}]$/.

Всего записей: 270 | Зарегистр. 07-04-2003 | Отправлено: 22:12 13-07-2004
   

Страницы: 1 2

Компьютерный форум Ru.Board » Интернет » Web-программирование » регулярные выражения в Perl
Cheery (13-01-2007 02:13): переезжаем сюда
Perl - Регулярные выражения


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru