简单的问题(我希望)
我有一个包含符号的动态字符串:?,/等 基本上它是我的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"; }
这会打印YES !!!
我需要快速解决这个问题。
非常感谢
答案 0 :(得分:7)
你真的需要正则表达式吗?问题只是一个简单的子字符串搜索...
if (index($test2, $test1) >= 0) { print "YES!!! \n";}
else { print "NOOOO!!! \n"; }
答案 1 :(得分:4)
也许尝试使用“\ 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!!!
答案 2 :(得分:3)
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!!!
答案 3 :(得分:1)
您是否在CPAN中查找了可能对您有帮助的现有模块?从PerlMonks开始,我发现了对Apache :: ParseLog和Apache :: LogRegEx
的引用