如何匹配管道字符后跟空格和另一个管道?

8 regex perl

我试图找到以字母开头的所有匹配项| |.

我试过了:if ($line =~ m/^\\\|\s\\\|/)哪个没用.

有任何想法吗?

Vin*_*vic 27

你正在逃避管道一次太多,有效地逃避了反斜杠.

print "YES!" if ($line =~ m/^\|\s\|/);
Run Code Online (Sandbox Code Playgroud)


小智 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  
Run Code Online (Sandbox Code Playgroud)