如何检查字符串是否具有某个特定字符

时间:2014-04-14 14:31:47

标签: regex perl

我正在尝试扫描字符串以查看它们是否具有某个特定字符。

例如,如果我正在寻找问号

Hello? I'm here

然而匹配正则表达式

Hello? Are you listening?

不会

我已尝试?{1}?{1}[^?]+,但它们都不起作用。谁能指出我正确的方向?

5 个答案:

答案 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)

您可以使用此正则表达式:

^[^?]*\?[^?]*$

Online Demo

答案 4 :(得分:0)

perl -ne 'print if /^[^\?]*\?[^\?]*$/'