Модераторы: ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сравнить две переменные 
V
    Опции темы
stells1983
Дата 12.10.2009, 06:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 12.10.2009

Репутация: нет
Всего: нет



есть две переменные которые необходимо между собой сравнить c помощью регулярных выражений

например, если PhoneNumber2 = 54321#,а PhoneNumber1 = 54321, то условие должно выполниться как положительное  
(где # - это символ)

я сделал как описано ниже, но так не правильно...



Код

if ( $PhoneNumber1 =~/($PhoneNumber2'#')/ ) {}

                   print " $PhoneNuber1 ";

else
                    {
                   print " $PhoneNuber2 ";

                    next;
                    }


как можно описать переменную, которая соотвествует другой переменной, но в конце при этом содержит символ # 

PM MAIL   Вверх
krypt3r
Дата 12.10.2009, 07:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 9.6.2009

Репутация: нет
Всего: 16



Возможно, так
Код

print $PhoneNumber1 =~ /$PhoneNumber2/ ? $PhoneNumber1 : $PhoneNumber2;

PM MAIL   Вверх
stells1983
Дата 12.10.2009, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 12.10.2009

Репутация: нет
Всего: нет



язык программирования практически не знаю.

1 вопрос. 
$PhoneNumber1 : $PhoneNumber2;  
что это значит в строке?

2 вопрос. 
$PhoneNumber1 =~ /$PhoneNumber2/ ?
тут указываете что за переменной может быть 0 или 1 любой символ так?

3 вопрос.
я сделал следующим образом, вроде как работает...
но знак # по докам что все что идет за ним заремировано, или в моем случае он будет как символ в переменной?

Код

if ( $PhoneNumber1 =~/([$PhoneNumber2]#)/ ) {}
                print " $PhoneNumber1 ";

else
                    {
                   print " $PhoneNumber2 ";

                    next;

                    }
PM MAIL   Вверх
krypt3r
Дата 12.10.2009, 09:31 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 9.6.2009

Репутация: нет
Всего: 16



Чтобы было более понятно, код 
Код

print $PhoneNumber1 =~ /$PhoneNumber2/ ? $PhoneNumber1 : $PhoneNumber2;

идентичен коду
Код

if ($PhoneNumber1 =~ /$PhoneNumber2/) {
  print $PhoneNumber1;
} else {
  print $PhoneNumber2;
}

Первый вариант - более компактная запись (заимствовано из Си). Символы : и ? к регуляркам не имеют отношения. 
Перед символом # поставьте бэкслэш \
PM MAIL   Вверх
stells1983
Дата 12.10.2009, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 12.10.2009

Репутация: нет
Всего: нет



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

например, если PhoneNumber2 = 89019993210, где 89019993210 (11 знаков номера),
а PhoneNumber1 = 821219019993210, где 8(выход на межгород)2121(пин-код, всегда 4 цифры)9019993210(10 знаков номера)
то условие сравнения двух переменных, должно выполниться как положительное  

я так понимаю должна вызываться какая-то подфункция, которая будет изменять PhoneNumber1 и приводить его в виду PhoneNumber2.
А сравнивать буду что-то типа:

if ( $PhoneNumber2 =~/($pinkodMG[$PhoneNumber1])/ ) {}
  
вызываться будет функция типа:

Код

sub pinkodMG
{
    my $pinkodMG = shift;
    chomp($pinkodMG);
    #TODO:bez koda vihoda na mezhgorod
        if ($pinkodMG =~ s/^8\d{4}(\d{10,})$/8$1/){;}
    return $pinkodMG;
}


Как это правильно можно сделать?
PM MAIL   Вверх
krypt3r
Дата 12.10.2009, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 9.6.2009

Репутация: нет
Всего: 16



Можно еще проще сделать
Код

$PhoneNumber2 = '89019993210';
$PhoneNumber1 = '821219019993210';
if (substr ($PhoneNumber1, -10) eq substr ($PhoneNumber2, -10)) {
  print "OK";
} else {
  print "Failed";
}

Если так хочется с функцией повозиться, то вот вариант
Код

if ($PhoneNumber2 eq pinkodMG ($PhoneNumber1)) {
  print "OK";
} else {
  print "Failed";
}

sub pinkodMG {
  my $pinkodMG = shift;

  $pinkodMG =~ /8\d{4}(\d{10})/;
  return 8 . $1;
}

PM MAIL   Вверх
stells1983
Дата 12.10.2009, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 12.10.2009

Репутация: нет
Всего: нет



что-то скрипт у меня возвращает и другие значения, которые не удовлетворяют условию... 
PM MAIL   Вверх
Bulat
Дата 12.10.2009, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: нет
Всего: 57



Код

my $PhoneNumber2 = '89019993210';
my $PhoneNumber1 = '821219019993210';

if (($PhoneNumber2 =~ /(\d{10})$/) == ($PhoneNumber1 =~ /(\d{10})$/)) {
  print "equal $1";
} else {
  print "not equal";
}


Мм.. А вот так не сработает?? smile


Это сообщение отредактировал(а) Bulat - 12.10.2009, 13:17


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
stells1983
Дата 13.10.2009, 04:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 12.10.2009

Репутация: нет
Всего: нет



не сработало (
вообще все значения стали удовлетворять условию (

сформировал в условии вот такую строку: 
if ( $PhoneNumber2 =~/(\b\d{3}\b)|(\b3822$PhoneNumber1\b)|(\b$PhoneNumber1\b)/ or $PhoneNumber1 =~/(\b\d{3}\b)|(\b$PhoneNumber3\b)|($PhoneNumber2\#)/ ) {}

из доков понял, что использовать or в условии только один раз можно, поэтому все таки склоняюсь к тому, что при сравнении вызывать подпрограмму, в которой приводить переменную PhoneNumber1 к виду без пин-кода и проверять через оператор присваивания.

Как предложил "krypt3r" отработало правильно, но как теперь в мое условие добавить еще вот это:

$PhoneNumber2 eq pinkodMG ($PhoneNumber1 )

Это сообщение отредактировал(а) stells1983 - 13.10.2009, 05:12
PM MAIL   Вверх
stells1983
Дата 13.10.2009, 06:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 12.10.2009

Репутация: нет
Всего: нет



добавил в конструкцию
                if ..............
                elsif ( $PhoneNumber2 eq pinkodMG ($PhoneNumber1)) {}
                
                else

и все )
всем спасибо!
PM MAIL   Вверх
Bulat
Дата 14.10.2009, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: нет
Всего: 57



Цитата(stells1983 @  13.10.2009,  04:08 Найти цитируемый пост)
не сработало (
вообще все значения стали удовлетворять условию (


да, сорри, немного не учел "булевость" перла.

Код

my $PhoneNumber2 = '88019993210';
my $PhoneNumber1 = '821219019993210';
my $FirstNumber;
my $SecondNumber;
if ($PhoneNumber1 =~ /(\d{10})$/) {$FirstNumber = $1};
if ($PhoneNumber2 =~ /(\d{10})$/) {$SecondNumber = $1};
if ($FirstNumber == $SecondNumber) {
  print "equal $FirstNumber ";
} else {
  print "not equal";
}

 smile

Это сообщение отредактировал(а) Bulat - 14.10.2009, 11:01


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Регулярные выражения | Следующая тема »


 




[ Время генерации скрипта: 0.0486 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.