| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Регулярные выражения > Не ищет по шаблону |
| Автор: Pheanix 28.11.2007, 20:20 |
| Люююдддиии! Делаю скрипт, который будет лезть в базу 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 |
| Автор: Anarki 28.11.2007, 22:54 | ||
| Потому что $name1, $name2 подставляются в регулярное выражение не экранированные. Используйте quotemeta.
|
| Автор: Pheanix 29.11.2007, 12:19 |
| Спасибо большое. Но вроде у меня получилось!!! Я добавил в текст вот такую штуку, чтобы он из сообщения $message убирал все знаки .[](): вот то, что добавил $message=~s/ |\.|\[|\]|\(|\)|\-|\://g; $name1=~s/ |\.|\[|\]|\(|\)|\-|\://g; $name2=~s/ |\.|\[|\]|\(|\)|\-|\://g; но твой способ тоже обязательно проверю! Спасибо большое за помощь!!! |