Регулярное выражение Perl - специальные символы в динамическом регулярном выражении - PullRequest
0 голосов
/ 28 февраля 2011

Простой вопрос (надеюсь)

У меня есть динамическая строка, которая содержит символы:?, /, И т. Д. В основном это строка URL в строке журнала в моем файле ошибок apache

Разобрав мой файл журнала, я хочу увидеть, существует ли определенный экземпляр URL в строке:

Строка URL для поиска: "http://www.foo.com? blah"

Знак вопроса выбрасываетменя, как с любыми специальными символами в регулярных выражениях.Я пытаюсь следующее:

my $test1 = 'my?test';
my $test2 = 'this is a my?test blah test';

if ($test2 =~ /$test1/)    {    print "YES!!! \n";}
else   {     print "NOOOO!!! \n";  }

Это печатает NOOOO

my $test1 = 'mytest';
my $test2 = 'this is a mytest blah test';

if ($test2 =~ /$test1/)    {    print "YES!!! \n";}
else   {     print "NOOOO!!! \n";  }

Это печатает ДА ​​!!!

Мне нужно это решение быстро.

Спасибо большое

Ответы [ 4 ]

7 голосов
/ 28 февраля 2011

Вам действительно нужно регулярное выражение? Проблема в простом поиске подстроки ...

if (index($test2, $test1) >= 0)    {    print "YES!!! \n";}
else   {     print "NOOOO!!! \n";  }
4 голосов
/ 28 февраля 2011

возможно попробуйте с помощью "\ Q" экранировать специальный символ

my $test1 = 'my?test';
my $test2 = 'this is a my?test blah test';

if ($test2 =~ /\Q$test1/)    {    print "YES!!! \n";}
else   {     print "NOOOO!!! \n";  }

выход YES!!!

3 голосов
/ 28 февраля 2011

quotemeta может обрабатывать специальные символы регулярного выражения.

use warnings;
use strict;

my $test1 = quotemeta 'my?test';
my $test2 = 'this is a my?test blah test';

if ($test2 =~ /$test1/)    {    print "YES!!! \n";}
else   {     print "NOOOO!!! \n";  }

{
    my $test1 = quotemeta 'mytest';
    my $test2 = 'this is a mytest blah test';

    if ($test2 =~ /$test1/)    {    print "YES!!! \n";}
    else   {     print "NOOOO!!! \n";  }
}

Печать:

YES!!! YES!!!

1 голос
/ 28 февраля 2011

Вы искали в CPAN существующий модуль, который может вам помочь? Из PerlMonks я нашел ссылки на Apache :: ParseLog и Apache :: LogRegEx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...