Forum Webscript.Ru
Программирование => Perl => Тема начата: monah от 27 Июня 2003, 21:53:50
-
Доброго времни суток.
Новичек, осваиваю регулярные выражения.
Не понимаю почему в случае глабального поиска операторы if и while работаю не одинаково.
Элементарный пример:
$s = "Privet, privet privet hi wow privet";
if ($s =~ /(privet)/gi) {
print $1, "\\n";
}
Найдет всего один привет, если тупо if заменить на while Мартышка не потеряет ни одного привета.
ПОЧЕМУ?
Зарание благодарен.
-
Если просто перевести Агло-Перл на Русский, для "иф":
"Напечатать "privet"(в смысле, только раз), если он присутствует в строке(кол-во не важно)"
а для "вайл":
"Печатать "privet", пока он поподается в строке(т.е. сколько раз поподается столько и печатать)"
-
Таким образом, если я нахожу все url, например так:
/(\\baction|\\bhref)(.+?)"(.+?)"/
в документе и скидываю все тем же print
print (HANDLER $3, "\\n");
в выходной файл, единственный способ зацепить 2 или более (к примеру) url в одной строке - использование while.
Так?
-
Извините, в конце регулярного выражения конечно /../gi
Честно не понял про print.
Он же глупый: увидел - напечатал.
Или принт понимается этими операторами неодинаково?
-
Можно ли подставлять в regex переменную, содержащую имя искомого файла?
-
Можно.
-
Спасибо, работает :-)
Задача: найти образец в любой строке кроме закоментированной написал так:
/^[^#]((\\w|\\W)*?)($pattern)/
если $pattern стоит в самом начале строки, он не находится как сделать так что бы находился и он?
-
Хотелось бы узать вот еще что:
применяю функцию find из File::Find
find(\\&wanted, @dir);
она вызывает указанную функцию для каждого элемента в dir, как вырубить два первых: " . " и " .. " ?
-
что-то вроде
continue if (/^\\.+$/);
-
или просто удалить 2 первых значения...
splice (@dir, 0, 2);
-
интересно, что быстрее :)
-
Xander
Мне кажется быстрее считывать директорию без певрых двух значений... :-)
-
Спасибо, первые 2 элемента вырубил в начале options тупо:
if (($_ ne ".") and ($_ ne ".."))
Единственное что так это как научить regex
/^[^#]((\\w|\\W)*?)$pattern/
видеть $pattern в самом начале строки, правда это не нужно, файлы проверяются на наличие ссылок в них на имена файлов своих соседей и этим выражением, но так для развитьия...
-
Спасибо, первые 2 элемента вырубил в начале options тупо:
if (($_ ne ".") and ($_ ne ".."))
я бы это сделал так:
next if /^\\.?\\.$/;
-
Стоит ли по воробью бить из пушки?
такой меня сегодня вопрос озадачил (по молодости то):
вызываю скрипт из скрипта в надежде что он унаследует переменные родителя
$output = `./test.pl`;
в родителе есть $ARGV[0], так при выполнении test.pl ругается мол переменная не инициализирована.
И вообще, где обещенный интерпретатор командной строки?
-
да, а вот так все работает:
system("./test.pl $ARGV[0]");
Но, у меня на выходе в случае ОК только нуль, и опять - где инерпритатор, простите за тупость...
-
monah:
и опять - где инерпритатор
Какой? Если Perl то which perl тебе поможет
-
Разобрался с интерпритатором командной строки все вроде работает...
Встала новая задача: проверять скрипты генерирующие HTML документы на предмет всяких тэгов и проч. Не подскажете подходящий валидатор?
-
monah
проверять скрипты генерирующие HTML документы на предмет всяких тэгов и проч
Несколько не понял вопроса, где проверять теги? в в самом коде скрипта или в HTML который генерит этот скрипт?
IMHO не проще ли создать новую тему, ибо в этой уже непонятно о чем идет речь...
-
Не понятно, зачем ХТМЛу валидатор, это же не ИксМЛ и даже не ИксХТМЛ? Не знаю есть ли утилиты для этого, но в XMLSPY от Altova (http://www.altova.com/) это можно делать. Поищите, может у них есть отдельная утилита для этого.
-
Как не понятно?
Начну с начала: скрипты генерируют HTML документы, их (скрипты) надо проверять на коректность HTML кода - закрытые тэги и все такое. Для этого существуют программы - Валидаторы. Вот я ищу подходящий. Последнее время решил попробоветь подсунуть адрес одного моего скрипта прямо в форму на сайте http://htmlvalidatir.com, но не руками а из скрипта с помощью LWP.
Запрос пишу вроде корректно:
-------
my $req = POST \'http://htmlvalidatir.com/php/onlinecheck.php\',
[ name => \'url\', value => \'http://some/path\' ];
и вывожу итог на экран:
print $res->content;
В итоге анализируя полученный документ оказывается что данные небыли переданы, будто я вовсе не заполнял поля формы!
В чем ошибка?
-
Извините адрес не корректен :
http://www.htmlvalidator.com