2013-11-11 1 views
0

У меня есть входной файл, который я читаю в хэш-таблицу, файл ввода, как показано нижекак проверить несколько подстроки в строке в Perl

MANAGEMENT=IDL 
NORTH=IDL,NORTHERN||VIDL,NORTH||IDL,NORTH 
SOUTH=IDL,SOUTHERN||CIDL,SOUTH 

Теперь для каждого ключа я должен проверить, если другой строка сказать экземпляр (Это также строка) содержит значение то есть для NORTH

Condition= TRUE if 
$instance contains (IDL AND NORTHERN) OR (VIDL AND NORTH) OR (IDL AND NORTH) 

Обратите внимание, что значение может много таких ИЛИ условия

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

Я думал о переходе значения в функцию, которая будет возвращать регулярное выражение, против которого я могу проверить, но не был в состоянии думать о таком (Я новый пчела в Perl)

Цените помощь или лучшие предложения

+0

Извините, я отредактировал его СЕВЕР; довольно новый в perl, поэтому я хотел посмотреть, есть ли какие-то быстрые методы, которые я мог бы использовать. – learner

+0

@mpapec $ instance - строка – learner

+0

Нет, она содержит, как я писал выше; ($ instance содержит IDL И $ instance содержит NORTHERN) ИЛИ ($ instance содержит IDL И $ instance содержит NORTH) – learner

ответ

0

Возможно, вы можете создать несколько хеш-карт для своих индексов. То есть, построить %IDL, %NORTH и %NORTHERN. В каждом из этих хэш-карт будет присутствовать строка, если она содержит соответствующую подстроку. Таким образом, ваша оценка для строки $s становится:

$IDL{$s} && $NORTHERN{$s} || $IDL{$s} && $NORTH{$s} 

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

$IDL{$s} && ($NORTHERN{$s} || $NORTH{$s}) 
0

С очень мало меня пойти на здесь, я бы сказал, что ты мог бы сделать:

if ($instance =~ /(?=.*idl)(?=.*north(?:ern)?/) { 
    print "$instance\n"; 
} 

В приведенном выше коде я использую утверждение lookahead. То, что он говорит, соответствует любой строке, содержащей как IDL, так и NORTHERN.

+0

Спасибо большое @ user847388, но это было просто пример, который он может изменить, также я могу иметь несколько условий ИЛИ или условие ИЛИ. – learner

Смежные вопросы