我正在尝试扫描字符串以查看它们是否具有某个特定字符。
例如,如果我正在寻找问号
Hello? I'm here
然而匹配正则表达式
Hello? Are you listening?
不会
我已尝试?{1}
和?{1}[^?]+
,但它们都不起作用。谁能指出我正确的方向?
答案 0 :(得分:4)
为什么不这样做:
(\?)
并计算比赛次数。
或者更简单地说,使用?
tr///
的数量
my $c = $string1 =~ tr/?//;
答案 1 :(得分:3)
您可以执行类似
的操作my $cnt = () = $str =~ m/\Q$pat/g;
if ($cnt == 1) {
# matched
}
else {
# failed
}
$pat
是您要匹配的模式(本例中为字符),例如'?'
。
答案 2 :(得分:3)
如果您仅查找特定字符,则可以使用音译运算符tr///
:
my $count = $string =~ tr/?/?/;
if( $count == 1 ) {
...
}
使用音译操作符,我可以从替换侧离开,任何没有替换字符的字符都将使用之前的替换字符。如果没有先前的替换字符,则不进行替换。我只是遗漏了tr///
的第二部分:
my $count = $string =~ tr/?//;
if( $count == 1 ) {
...
}
但是,这对模式不起作用。这绝对是字符到字符的替换。对于模式,您使用Lee Duhem's answer
执行相同的操作答案 3 :(得分:0)
答案 4 :(得分:0)
perl -ne 'print if /^[^\?]*\?[^\?]*$/'