我正在尝试查找以| |
开头的字符串中的所有匹配项。
我尝试过:if ($line =~ m/^\\\|\s\\\|/)
无效。
有什么想法吗?
答案 0 :(得分:27)
你正在逃避管道一次太多,而是有效地逃避了反斜杠。
print "YES!" if ($line =~ m/^\|\s\|/);
答案 1 :(得分:5)
管道角色应该在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
答案 2 :(得分:3)
如果它是您正在搜索的文字字符串,则不需要正则表达式。
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。
答案 3 :(得分:0)
删除^和双反斜杠。 ^强制字符串位于字符串的开头。由于您在一个字符串中查找所有匹配项,这可能不是您想要的。
m/\|\s\|/
答案 4 :(得分:-1)
怎么样:
m/^\|\s*\|/