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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
allein



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Народ, помогите с заданием:
Написать регэксп, под который попадут следующие строки
www.mydomain.com
www.MyDomain.com
www.my-domain.com
www.my - domain.com
www.My - Domain.com
 
и не попадут следующие:
www.My-Domain.com
www.otherdomain.com
www.motherdomain.com

Всего записей: 835 | Зарегистр. 09-02-2006 | Отправлено: 22:57 08-05-2008
CheRt



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

Код:
 
/(w{3}\.(((M|m)y(\s\-\s)?(D|d))|(my\-d))omain\.com)/s
 



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

Всего записей: 1118 | Зарегистр. 14-12-2001 | Отправлено: 10:14 09-05-2008
joymix

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Приветствую, уважаемые.  
С создания новой темы стражи выгнали сюда.
Подзабыл регулярные выражения, нужен небольшой хелп.  
Два вопроса.
1. Есть переменная $a внутри которой имеются фрагменты текста с двойными кавычками ("). Нужно удалить все закавыченные фрагменты, т.е. текст, который находится между кавычек.  
 
2. Типовая задача с которой сталкиваются все - обрезание новости по длине. Если делать substr - можно обрезать в середине слова. Нет ли способа через regex обрезать переменную, скажем, после первого пробела после 200 символа?
 
Буду признателен за помощь.

Всего записей: 33 | Зарегистр. 04-03-2003 | Отправлено: 22:24 12-05-2008
CheRt



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

Код:
 
s/"[^"]*"//gs;
 

 
2. Алгоритмизируем задачу, дабы не усложнять логику:
 а. Мы знаем, что типовым разделителем слов является набор символов \s \t \r?\n .
 б. Так же у нас есть приблизительная информация, что размер "слова" не превышает 50 символов.
Из этого следует, что достаточно подрезать (200 + 50 - 1) символов  substr($string, 0, 249), затем разделить на "слова+знаки препинания" split(/[\s\t\r\n]+/, $string) и выводить, увеличивая счетчик на длину выводимого элемента каждый раз, пока счетчик не перейдет отметку 200.
А сложные решения лучше потом сделаешь, когда опыта поболее будет.

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

Всего записей: 1118 | Зарегистр. 14-12-2001 | Отправлено: 15:25 13-05-2008
joymix

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо за решение, появилась потребность его немного проапдейтить...  Подсоветуйте плиз.
 
Итак, из текста нужно удалить все фрагменты, которые закавычены. Однако существует вероятность, что кое-где кавычки закрыть забыли.  
Имеем пример текста:
 
бла-бла-бла "бла-бла-бла-бла-бла" бла-бла-блабла-бла-блабла-бла-бла "бла-бла-блабла-бла-блабла-бла-бла "бла-бла-блабла-бла-блабла-бла-бла".
 
Необходимо модернизировать код вырезания цитат так, чтобы  
проверить от открывающей кавычки 200 символов, если закрывающая кавычка найдена - удалить этот фрагмент включая символы кавычек. Если закрывающая кавычка не найдена - просто удалить 200 символов.
 
Мечтаю о одном красивом регулярном выражении... С ужасом думаю об альтернативном посимвольном разборе громадных фрагментов текста...

Всего записей: 33 | Зарегистр. 04-03-2003 | Отправлено: 13:34 09-06-2008
Break_Action



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Приветствую,  
Уважемые гуру, подскажите плз. Как установить на определенное место в строке и обрезать строку до определенных символов.  
Вот пример  
==== Строка =============  
01234567890012345678004568  
========================
Необходимо стать на место 5ого символа и отрезать строку до двух нулей и обязательно до первых двух нулей.  
То есть должны получить 56789.  
Заранее благодарен за ответ.
 
Добавлено
Мне удается ограничит число, но встать на необходимую позицию не получается помогите плз.
 
pos($f)=5;
$f=~s/\G([0-9]+?)00.*/$1/g;
 
получаю 01234567
 
Почему-то pos не срабатывает.

Всего записей: 296 | Зарегистр. 12-09-2001 | Отправлено: 01:16 25-12-2008 | Исправлено: Break_Action, 05:03 25-12-2008
SAOD

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Break_Action
Вот так, как один из вариантов:
 
$f=~s#.{5}([0-9]+?)00.*#$1#;

Всего записей: 228 | Зарегистр. 30-12-2006 | Отправлено: 10:42 25-12-2008
Break_Action



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

Всего записей: 296 | Зарегистр. 12-09-2001 | Отправлено: 17:04 25-12-2008
roddik



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

Код:
$a = "“a’b”";
$a =~ tr/ab“’”/ba"'"/;
 
print $a;

 
Не знаю как у всех, но у меня выводит "'"b"'"a"'", хотя я ожидал "a'b", в чем загвоздка? Спасибо

Всего записей: 233 | Зарегистр. 27-01-2007 | Отправлено: 00:56 03-01-2009
KADABRA



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

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

Всего записей: 1718 | Зарегистр. 14-07-2003 | Отправлено: 01:26 03-01-2009
roddik



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

Всего записей: 233 | Зарегистр. 27-01-2007 | Отправлено: 13:47 03-01-2009
Printessa



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В связи со сложной ситуацией в мире нужна програмка на Perl (или еще на чем нибудь), которая в файле price.html ищет дробное число (число может разделятся, как запятой, так и точкой) и умножает его на нужный коэффицент (например на 1,4) и заменяет старое значение на новое и сохраняет в новый файл...  
Значения находятся между тегами, поэтому можно добавить для более точного определения в Regexp, что между ними число - ">" и "</"...
 
Например:  
<TD class=center>2,69</TD>  
<TD class=center>22000.00</TD>  
 
Таких чисел в файле более 1000...  
 
Помогите, кто умеет, пожалуйста, а то голова не понимает Regexp...  

Всего записей: 25 | Зарегистр. 17-06-2007 | Отправлено: 23:38 15-01-2009 | Исправлено: Printessa, 23:45 15-01-2009
CheRt



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

Код:
 
my $sourse = '1.html';
my $result = '2.html';
my $k = 1.4;
open(SF, $source);
 open(RF, ">$result");
  while(<SF>) {
   if (my $num = m/<td class=center>([0-9\-\+\.\,]+)</td>/i) {
    $num =~ s/,/\./g;
    print RF ($num*$k), "\n";
   }
  }
 close(RF);
close(SF);
 


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

Всего записей: 1118 | Зарегистр. 14-12-2001 | Отправлено: 00:22 16-01-2009
KADABRA



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

Цитата:
а то голова не понимает Regexp...  


Код:
 
my $mult = 1.4;
$_="<TD class=center>2,69</TD><TD class=center>22000.00</TD>";
s/>(\d+)[,.](\d\d)</ '>'. sprintf('%.2f', "$1.$2" * $mult) .'<'/ge;
print $_;
 


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

Всего записей: 1718 | Зарегистр. 14-07-2003 | Отправлено: 00:25 16-01-2009
Printessa



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KADABRA и CheRt - громадное спасибо Вам! - очень помогли!
Взяла RegExp у KADABRA и остальное у CheRt

Всего записей: 25 | Зарегистр. 17-06-2007 | Отправлено: 21:42 16-01-2009 | Исправлено: Printessa, 21:43 16-01-2009
tolyn77



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
привет, Всем
подскажите как извлечь имя сервера из адреса?
ну для пример есть
12.34.56.78:90/index.html
http://domain.ru/index.html
ftp://ftp.name.domain.ru/file.zip
а хочу получить
12.34.56.78
domain.ru
ftp.name.domain.ru
заранее благодарен

Всего записей: 1502 | Зарегистр. 07-09-2004 | Отправлено: 21:29 04-02-2009 | Исправлено: tolyn77, 21:31 04-02-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
tolyn77
http://search.cpan.org/dist/mod_perl/docs/api/APR/URI.pod

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:39 04-02-2009
tolyn77



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
12.34.56.78:90/index.html - не обрабатывает

Всего записей: 1502 | Зарегистр. 07-09-2004 | Отправлено: 06:49 06-02-2009
arreke



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
имеется текстовый файл "login.txt" такого содержания
 

Код:
 
<input type='text' name='name_login' size=20 value='$_[1]'>
<input type='text' name='name_pass' size=20 value=''$_[2]''>
 

 
имеется PERL-скрипт, к нему нужно приделать функцию для замены переменных в этом текстовом файле на соответствующие значения
я тут вроде начал, а как дальше написать не знаю:
 

Код:
 
print_file("login.txt", "root", "blabla");
 
sub print_file
{
    open F, "$_[0]" or die "Can't open $_[0] : $!";
    while (<F>) {
        my $st = $_;
        $st =~ s/(\$_\[\d+\])/$_[1]/eg;
        print $st;
    }
    close F;
}
 

 
данный код работает, но всё что находит заменяет на переменную $_[1], а надо чтобы заменял на соответствующую переменную.
как это сделать?

Всего записей: 98 | Зарегистр. 11-01-2007 | Отправлено: 20:44 15-02-2009
CheRt



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Да хоть вот так, в зависимости от того, что вам надо

Код:
print_file("login.txt", "root", "blabla");  
 
sub print_file  
{  
    open F, "$_[0]" or die "Can't open $_[0] : $!";  
    while (<F>) {  
        my $st = $_;
        $st =~ s/(\$_\[\d+\])/_value($_[0], $1)/esg;
        print $st;  
    }  
    close F;  
}
 
sub _value {
  return shift->{shift()};
}
 

 
где $_[0] подразумевает ссылку на хэш соответствий )

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

Всего записей: 1118 | Зарегистр. 14-12-2001 | Отправлено: 22:12 15-02-2009
Открыть новую тему     Написать ответ в эту тему

Страницы: 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