正则表达式仍然是我逃避的事情之一。我想要的很简单,但我还没有能够始终如一地匹配。无论如何,我想要匹配的文字是/ssl/checkoutstep1.aspx
。
非常感谢您的专业知识。
答案 0 :(得分:4)
而不是默认分隔符/
,如果您使用类似非斜杠的管道,则会更容易:|
if ($string =~ m|/ssl/checkoutstep1\.aspx|i) {
print 'match';
} else {
print 'no match';
}
我假设你真的需要正则表达式(因为你想要学习它,或者你正在进行路径重写,或者其他什么)。您的示例可以通过简单的不区分大小写的indexof或contains来解决。
答案 1 :(得分:0)
因为看起来你真的不需要正则表达式,所以你应该考虑eq或index。
if ( lc( $string ) eq '/ssl/checkoutstep1.aspx' ) { ... } ## for exact matches
或
if ( index( lc( $string ), '/ssl/checkoutstep1.aspx' ) != -1 ) { ... } ## for partial matches
这更快,避免了正则表达式的混淆。如果你坚持使用正则表达式,agent-j的响应就是你想要的,尽管我更喜欢{}。
if ( $string =~ m{\Q/ssl/checkoutstep1.aspx\E}i ) { ... } ## the \Q and \E escape the special chars between them