Опубликовано Ноябрь 4, 2011 рубрики:
C#,
Perl,
PHP|Комментарии к записи RegExp отключены
Как обычно, появилась интересная задачка по регулярным выражениям, требуется написать некоторый макрос, который при встрече в шаблоне текста будет заменяться определенными значениями сформированными из параметров макроса. И чтобы было не совсем тривиально будет еще упрощенная версия этого же макроса.
упрощенный макрос link{«text»,id} и полная версия link{«text»,id}img{id}, результат их работы будет таков
макрос номер 1:
<a href="link_id">text</a>
макрос номер 2:
<a href="link_id">text<img src="img_id"></a>
регулярное выражение для полной версии макроса
/link\{«(.*?)»,([0-9]+)?)\}img\{([0-9]+?)\}/
и соответственно для упрощенной
/link\{«(.*?)»,([0-9]+?)\}/
пример шаблона:
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed arcu link{«lorem»,10}img{20}, semper id dictum sit amet, egestas a dui. Donec condimentum link{«gravida ullamcorper»,5}.
результат работы регулярного выражения для полной версии макроса lorem, 10, 20
результат работы для упрощенной: lorem»,10}img{20}, semper id dictum sit amet, egestas a dui. Donec condimentum link{«gravida ullamcorper, 5
Прямо скажем, не то что я ожидал увидеть. Пробовал разные варианты ограничить жадность квантификаторов, даже всякие магически пасы в виде ?!, ?!= и прочих, пока без просвета.
Опубликовано Ноябрь 4, 2010 рубрики:
Perl|Комментарии к записи печать самого себя отключены
#!/usr/bin/perl
# скрипт печатает сам себя
open FL, $0 || die("ERROR: $!");
print while <FL>;
close FL;
Опубликовано Октябрь 8, 2010 рубрики:
Perl|Комментарии к записи задачка 2. отключены
*как выяснилось, решение корректно на числах одного порядка
есть 10 миллиардов записей в файле, каждая запись это число типа double, требуется найти минимальное значение из 10% максимальных.
Подробнее »
Опубликовано Октябрь 8, 2010 рубрики:
Perl|Комментарии к записи задачка 1. отключены
Дан текстовый файл. Необходимо выделить из него 50 наиболее часто повторяющихся строк.
Подробнее »
Опубликовано Июнь 18, 2010 рубрики:
Perl|Комментарии к записи REGEXP, собрать ссылки со страницы отключены
Если требуется собрать все ссылки которые есть на странице то поможет следующее регулярное выражение:
{<a.*?\s{1}href=\s*(["'])(.+?)\1.*?>}
оно ищет href который может быть обрамлен кавычками, слева от него может быть любое кол. символов до начала тега, но обязательно будет пробел, справа после закрывающей URL кавычки может быть любое количество символов или сразу закрываться тег.
следующий код собирает в скалярный массив все ссылки.
while($a=~m{<a.*?\s{1}href=\s*(["'])(.+?)\1.*?>}oig){
push(@m,$2) if $2;
}
или краткая форма:
push(@m,$2) while($a=~m{<a.*?\s{1}href=\s*(["'])(.+?)\1.*?>}ig);
Опубликовано Июнь 18, 2010 рубрики:
Perl|Комментарии к записи REGEXP, собрать все email’ы со страницы отключены
Вот, простая и дубовая конструкция, лишенная красоты и лаконичности присущей перлу, но зато очевидная на 100%
while($a=~m{=(['"])mailto:(.+?)\1.*?>}ig)
{
push(@m,$2) if $2;
}
это регулярное выражение ищет в тексте конструкцию вида «mailto:blablabla», где кавычки могут быть как одинарные так и двойные, первые скобки нужны для того чтобы найти и определить в переменную $1 тип кавычек в которых находится искомое, ну а вторые нужны чтобы в переменную $2 положить сам почтовый адрес.
более краткая запись:
push(@m,$2) while($a=~m{=(['"])mailto:(.+?)\1.*?>}ig);
Опубликовано Июнь 14, 2010 рубрики:
Perl|Комментарии к записи hello world отключены
Мое знакомство с программированием под web началось в далеком 2001 году, за достоверность описываемых событий я уже ручаться не могу, очень многое успело наложиться на память с тех времен. Но исписаны были килобайты кода, некрасивого, нерабочего, и просто опасного. Но любовь к моей первой веб hello world я сохраняю до сих пор.
#!/usr/bin/perl
print "Hello world\n\n";