【发布时间】:2008-10-08 13:07:16
【问题描述】:
我试图在以| | 开头的字符串中查找所有匹配项。
我试过了:if ($line =~ m/^\\\|\s\\\|/) 没有用。
有什么想法吗?
【问题讨论】:
-
如果这不起作用,您应该提供更多上下文。
-
或者写一个不同的问题:)
我试图在以| | 开头的字符串中查找所有匹配项。
我试过了:if ($line =~ m/^\\\|\s\\\|/) 没有用。
有什么想法吗?
【问题讨论】:
您转义管道的次数太多,实际上转义的是反斜杠。
print "YES!" if ($line =~ m/^\|\s\|/);
【讨论】:
管道字符应在 Perl 正则表达式中使用单个反斜杠进行转义。 (Perl 正则表达式与 POSIX 正则表达式有点不同。如果您在 grep 中使用它,情况会有所不同。)如果您专门寻找它们之间的空格,则使用未转义的空格。它们在 Perl 正则表达式中是完全可以接受的。这是一个简短的测试程序:
my @lines = <DATA>;
for (@lines) {
print if /^\| \|/;
}
__DATA__
| | Good - space
|| Bad - no space
| | Bad - tab
| | Bad - beginning space
Bad - no bars
【讨论】:
如果您要搜索的是文字字符串,则不需要正则表达式。
my $search_for = '| |';
my $search_in = whatever();
if ( substr( $search_in, 0, length $search_for ) eq $search_for ) {
print "found '$search_for' at start of string.\n";
}
或者这样做可能更清楚:
my $search_for = '| |';
my $search_in = whatever();
if ( 0 == index( $search_in, $search_for ) ) {
print "found '$search_for' at start of string.\n";
}
当您想在正则表达式中使用文字时,您可能还想查看quotemeta。
【讨论】:
删除 ^ 和双反斜杠。 ^ 强制字符串位于字符串的开头。由于您要在一个字符串中查找所有匹配项,因此这可能不是您想要的。
m/\|\s\|/
【讨论】:
怎么样:
m/^\|\s*\|/
【讨论】: