2013-08-12 2 views
1

Я пытаюсь искать определенное ключевое слово в многострочный входной строки, как это,Обработка ввода многострочного - Loop против Regex

this is input line 1 
this is the keyword line 
this is another input line 
this is the last input line 

ввода нескольких строк хранится в переменной называется «$ входные данные". Теперь у меня есть 2 способа в виду, чтобы искать слово «ключевое слово»

Метод 1:
Использование раскола, чтобы поместить строки в массив с помощью «\ п» разделитель и перебирать и обрабатывать каждую строку, используя Еогеасп цикл, как это,

my @opLines = split("\n", $inputData); 

# process each line individually 
foreach my $opLine (@opLines) 
{ 
    # look for presence of "keyword" in the line 
    if(index($opLine, "keyword") > -1) 
    { 
     # further processing 
    } 
} 


Способ 2:
Используя регулярные выражения, как показано ниже,

if($inputData =~ /keyword/m) 
{ 
    # further processing 
} 


Я хотел бы знать, как эти 2 метода сравниваются друг с другом и что будет лучшим методом в отношении фактической производительности кода и времени выполнения. Кроме того, есть ли лучший и эффективный способ решения этой задачи?

ответ

2
my @opLines = split("\n", $inputData); 

Создаст переменная @opLines, выделить память, и поиск "\n" корыта всего $inputData и писать найденные строки в нем.

# process each line individually 
foreach my $opLine (@opLines) 
{ 

будет обрабатывать всю кучу кода для каждого значения в массиве @opLines

# look for presence of "keyword" in the line 
    if(index($opLine, "keyword") > -1) 

будет искать "keyword" в каждой строке.

{ 
     # further processing 
    } 
} 

И comapare

if($inputData =~ /keyword/m) 

будет искать "keyword" и останавливается, когда найти первое вхождение.

{ 
    # further processing 
} 

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

documentationm модификатор регулярного выражения: Обработать строку как несколько строк. То есть, измените «^» и «$» на соответствие началу или концу строки только в левом и правом концах строки, чтобы сопоставить их в любой точке строки. Я не вижу ни ^, ни $ в вашем регулярном выражении, поэтому он бесполезен.

+0

Спасибо за отличный ответ! Разве не удалось получить последнюю часть, хотя с помощью^и $, вы могли бы уточнить? Извините, я немного новичок в regex ... –

+0

Вам просто не нужно использовать модификатор 'm' после вашего регулярного выражения, если вы не используете'^'или' $ 'в своем регулярном выражении. Он будет работать так же. –

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