URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5462
[ Назад ]

Исходное сообщение
"регулярное выражение  Perl"

Отправлено skuzma , 29-Май-06 20:50 
В приведенном ниже программном коде взять переменные, проверяемые синтаксической конструкциями [ ... ]
в двойные кавычки как показано в комментариях к программе.
Написать регулярное выражение на  Perl
Может кто знает?


let "last_two_sym = $SECONDS - $SECONDS / 100 * 100" # десятки и единицы
if [ $last_two_sym -ge 11 -a $last_two_sym -le 19 ]

####  if [ "$last_two_sym" -ge 11 -a "$last_two_sym" -le 19 ]

then
    units="секунд"    # для чисел, которые заканчиваются на "...надцать"
else
    let "last_sym = $last_two_sym - $last_two_sym / 10 * 10"  # единицы
    case "$last_sym" in
      "1" )
        units="секунду"         # для чисел, заканчивающихся на 1
      ;;
      "2" | "3" | "4" )
        units="секунды"         # для чисел, заканчивающихся на 2, 3 и 4
      ;;
      * )
        units="секунд"          # для всех остальных (0, 5, 6, 7, 8, 9)
      ;;
    esac
fi


Содержание

Сообщения в этом обсуждении
"регулярное выражение  Perl"
Отправлено phpcoder , 30-Май-06 07:19 
>в двойные кавычки как показано в комментариях к программе.
>Написать регулярное выражение на  Perl
>Может кто знает?

Что-то не очень понял задание, а додумывать не хочу. Если тебе нужно узнать что переменная заканчивается на что-то, то можно написать так: if($var~=/1$/) Знак доллара в конце означает как раз конец строки. (вроде синтаксис Перла правильно написал? ;) )


"регулярное выражение  Perl"
Отправлено skuzma , 30-Май-06 08:14 
>>в двойные кавычки как показано в комментариях к программе.
>>Написать регулярное выражение на  Perl
>>Может кто знает?
>
>Что-то не очень понял задание, а додумывать не хочу. Если тебе нужно
>узнать что переменная заканчивается на что-то, то можно написать так: if($var~=/1$/)
>Знак доллара в конце означает как раз конец строки. (вроде синтаксис
>Перла правильно написал? ;) )


Надо переменные в квадратных скобках заключить в кавычки, а с переменными вне квадратных скобках ничего делать не надо


"регулярное выражение  Perl"
Отправлено ACCA , 31-Май-06 00:38 
Через полгода ты сам забудешь, зачем писал хитрый regexp. Оставь тупую и понятную программу.

"регулярное выражение  Perl"
Отправлено NuINu , 31-Май-06 14:25 
>В приведенном ниже программном коде взять переменные, проверяемые синтаксической конструкциями [ ...
>]
>в двойные кавычки как показано в комментариях к программе.
>Написать регулярное выражение на  Perl
>Может кто знает?
>
>
>let "last_two_sym = $SECONDS - $SECONDS / 100 * 100" # десятки
>и единицы
>if [ $last_two_sym -ge 11 -a $last_two_sym -le 19 ]
>
>####  if [ "$last_two_sym" -ge 11 -a "$last_two_sym" -le 19 ]

Ежели конечно ты не сильно волокеш в регехпах то можешь попробовать преобразовать вот эту программу в то что тебе нужно, она точно выделяет твои переменные, а захочешь что бы все это с командной строки, возись с палками сам ;-)))

#!/usr/bin/perl -w

while(<>) {
# данная программа ищет во входящем потоке строку:
#   if [ $last_two_sym -ge 11 -a $last_two_sym -le 19 ]
# и добавляет кавычки к переменным
# те делает
#   if [ "$last_two_sym" -ge 11 -a "$last_two_sym" -le 19 ]
# и выводит их.
# if(m/$(if \[ )(\$[^ ]*)([^$]*)(\$[^ ]*)( \])/) {
#     print $1.'"'.$2.'"'.$3.'"'.$4.'"'.$5;
  if(m/^(if \[ )(\$[^ ]*)([^\$]*)(\$[^ ]*)(.*$)/) {
     print $1.'"'.$2.'"'.$3.'"'.$4.'"'.$5;
  }
}