![]() |
|
Модераторы: ginnie |
![]()
|
|
| Pheanix |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 28.11.2007 Репутация: нет Всего: нет |
Люююдддиии!
Делаю скрипт, который будет лезть в базу ms sql селектом забирать от туда одну строку, и чтоб эта строка сравнивалась с шаблоном! Шаблон хранится в файле trap.txt. Текст файла, из которого берутся шаблоны : NO TRAPD.CONF FMT FOR;(Integer): 18 [4];"no toner"; NO TRAPD.CONF; (Integer): 18 [4];"cose"; NO TRAPD.CONF FMT FOR .1.3.6.1.2.1.;(Integer) 19 [4];"open "; Вот часть скрипта, ответственного за это : open (TRAP, "c:/trap.txt") or die "cannot open file trap.txt"; while($line =<TRAP>) { #цикл по строкам файла #разбираем каждую строку файла на переменные по разделителю ';' ($name1,$name2,$name3)=split(";",$line); #сравниваем со значением полей. если нашли совпадение #переменная $message - это поле из БД MSSQL if (($message=~/$name1/i) and ($message=~/$name2/i)) {$message1=$name3;last;} else {$message1="test";} }; #соответственно, если находит сходство $message с двумя шаблонами $name1 и $name2, то $message1 должно равняться $name3 #однако у меня все время выдает $message1="test"! А не должно!! Текст шаблонов совпадает с строкой $message. close (TRAP); Есть идеи? кстати, если нужна строка message для сверки, то вот: 10.0.23.40: NO TRAPD.CONF FMT FOR .1.3.6.1.2.1.43.18.2.0.0 ARGS(7): [1] mgmt.mib-2.43.18.1.1.1.1.29 (Integer): 29 [2] mgmt.mib-2.43.18.1.1.2.1.29 (Integer): 4 [3] mgmt.mib-2.43.18.1.1.4.1.29 (Integer): 18 [4] mgmt.mib-2.43.18.1.1.5.1.29 (Integer): 26 Это сообщение отредактировал(а) Pheanix - 28.11.2007, 20:31 |
|||
|
||||
| Anarki |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 326 Регистрация: 14.3.2005 Репутация: нет Всего: 11 |
Потому что $name1, $name2 подставляются в регулярное выражение не экранированные.
Используйте quotemeta.
|
|||
|
||||
| Pheanix |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 28.11.2007 Репутация: нет Всего: нет |
Спасибо большое. Но вроде у меня получилось!!!
Я добавил в текст вот такую штуку, чтобы он из сообщения $message убирал все знаки .[](): вот то, что добавил $message=~s/ |\.|\[|\]|\(|\)|\-|\://g; $name1=~s/ |\.|\[|\]|\(|\)|\-|\://g; $name2=~s/ |\.|\[|\]|\(|\)|\-|\://g; но твой способ тоже обязательно проверю! Спасибо большое за помощь!!! |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Регулярные выражения | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |