| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Общие вопросы > регулярные выражения |
| Автор: SkyFlex 1.4.2006, 10:58 |
| Как выделить под строковую переменную определенную длинну. например $: = "$name $adress" необходимо чтобы переменная $name всегда занимала 20 символов в строке. |
| Автор: korob2001 1.4.2006, 13:36 | ||
|
| Автор: Ivan Kolesnikov 3.4.2006, 06:32 | ||
Или
Если пробелы нужно добавлять справа, а не слева |
| Автор: SkyFlex 3.4.2006, 17:41 |
| а равное количество пробелов справа и слева можно ставить с помощью sprintf? |
| Автор: korob2001 3.4.2006, 18:47 | ||
А зачем тебе? |
| Автор: SkyFlex 4.4.2006, 09:54 |
| ну да...в принципе мне это не нужно...так для сведения ) подскажите мне лучше как действуют enable и disable. естьпроцедура sub a {...}, которая выполняет ряд действий. возможно ли сделать enable(a) или disable(a). А над блоком можно ли произвести подобные действия? И как можно задать приоритет на выполнение процедур? |
| Автор: SkyFlex 4.4.2006, 13:35 |
| Обрабатываю строки: 'Иван Петров' 'ИВАН Петров' 'иван ПЕТРОВ' 'Петр иванов' и т.д. множество имен и фамилий. Необходимо если встретится имя иван вне зависимости от регистра обработать и вывести в файл фамилию. Подскажите регулярное выражение |
| Автор: sharq 4.4.2006, 18:33 | ||||
SkyFlex,
На некоторых машинах, придется установить локаль:
|
| Автор: SkyFlex 4.5.2006, 16:42 |
| $_='Дождь на улице' @x=split(/ /,$_); #необходимо убрать из массива @x элементы длина которых меньше 3 #т.е. в данном примере 'на' Подскажите, пожалуйста, если ли функция исключения из массива элементов... |
| Автор: korob2001 5.5.2006, 23:24 | ||||
Насчёт вывода фиксированной строки выровненной по центру, написал такую подпрограмму:
По поводу исключения елементов массива, длина которых меньше 3-х символов, то было бы не плохо создать отдельную тему для данного вопроса. Пожалуйста, соблюдайте http://forum.vingrad.ru/index.php?act=SR&f=27. Исключить такие элементы можно пройдя в цикле по всему массиву и одбросить не нужные елементы. Например:
|
| Автор: alyam 22.8.2006, 02:16 |
| обрабатываю строки: '^(.*) (рубль|рублей|рубля)\.$'; нужно вывести $1 $2, $2 при этом должно быть в верхнем регистре. подскажите пожалуйста. Можно конечно использовать схему =~s///, мб есть проще способ? |
| Автор: Nab 22.8.2006, 02:41 |
| Как именно? что мешает? Смотрите функции uc, ucfirst, lc, lcfirst и sprintf. Куда уж проще |
| Автор: alyam 22.8.2006, 04:14 |
| вывести надо в переменную $: $:="$1 $2" и как тут использовать функцию uc? |
| Автор: amg 22.8.2006, 06:55 |
| Например: $: = "$1 " . uc($2); (точка - оператор конкатенации (слияния) строк). Чтобы это работало с русскими буквами, нужно подключить локаль (см. выше). |
| Автор: alyam 22.8.2006, 12:56 |
| локаль пытаюсь установить, как выше указано - выдается ошибка: #perl: Can't locate loadable object for module POSIX in @INC (@INC contains: . D:/MMC D:/MMC) at main.c line 50 BEGIN failed--compilation aborted at D:/MMC /mmc.ini line 9. даже если я posix.pm скопирую, и xsloader.pm в d:/mmc |
| Автор: amg 22.8.2006, 14:51 | ||
С локалью лучше разобраться, жить будет проще. А уж если не получится, то в крайнем случае можно сделать свой uc.
|
| Автор: rschnz 22.8.2006, 20:58 | ||
| Вопрос по регулярным выражениям Имеется некоторый сайт, в html которого есть несколько блоков (упрощенно) <aaa> text </bbb>, т.е. известны маркеры начала и конца блоков, текст которых необходимо выделить. Проблема в том, что text - это произвольный текст, в котором - единственное, что известно - не встречается маркер конца. Если бы это был, например, некоторый URL, то я сделал бы так:
В моем же случае вместо " надо поставить слово - маркер конца. Но [] ведь только для символов |
| Автор: amg 23.8.2006, 07:33 | ||||
|
| Автор: alyam 26.8.2006, 02:54 |
| подскажите как сделать: в файле несколько строк. каждая строка обрабатывается и выводится на экран. нужно если строка содержит многоточие в начале, то ее необходимо добавить к предыдущей и вывести в одну строку. как это сделать? запоминать строку, затем проверять следующую строку на наличие многоточия и выводить в зависимости от этого ? помоему не рационально, потому что первая строка выводится вне зависимости от того какая за ней следует. можно ли перенести строку с многоточием на строчку выше? как проигнорировать символ перевода строки? )) |
| Автор: Nab 26.8.2006, 05:08 | ||||
Это элементарно, Ватсон, просто не выводить его.... А идея такова:
Я код не проверял, но идея должна быть понятна ... |
| Автор: alyam 26.8.2006, 13:02 |
| с файлом работает. а если это например чат, в котором аналигичным образом надо обработать строки, тогда получится что выводится строка сама по себе, потом я снова вывожу ее print $_ (притом без цвета !). |
| Автор: Nab 26.8.2006, 13:30 |
| А поподробней можно? |
| Автор: alyam 26.8.2006, 14:17 |
| объяснять долго и сложно. если интересно почитай тут http://haali.cs.msu.ru/mmc/sample.mmcrc |
| Автор: nitr 26.8.2006, 15:16 |
| alyam, новую тему запости... |
| Автор: Nab 26.8.2006, 18:51 | ||
Отвечать долго и сложно, если хочешь, купи себе книжку... А если нужен ответ, то будьте добры изложите свою проблему.... |
| Автор: alyam 26.8.2006, 19:44 |
| хорошо попытаюсь объяснить. Триггеры. Триггеру передаются запрошенные совпадения ($1-$9) и пришедшая от сервера строка, на которую этот триггер настроен. (На самом деле триггеру передаются 2 строки: $_ - это строка без цветов, и $; - строка с цветами во внутреннем формате mmc.) Триггер МОЖЕТ изменять эти строки, но: 1) это не рекомендуется 2) если триггер изменяет строки, он должен сам следить за соответствием строк $_ и $; Кроме того, существует специальная переменная, $:. Из нее нельзя читать, но ей можно присваивать, и если ей присвоить строку с цветами, то эта строка попадет и в $;, а в $_ будет записана эта же строка без цветов. пример: trig {CODE} '.*'; #триггер будет обрабатывать каждую строку приходящую от сервера если стока начинается с многоточия, как проигнорировать символ перевода строки? т.е. если написать trig {chomp} '.*'; или trig {chomp} $_, что одно и тоже то это не приведет ни к какому результату |
| Автор: korob2001 26.8.2006, 20:51 |
| alyam - создайте новый топик. Модератор: Читаем правила форума. Один топик - один вопрос. Тема закрыта. |