匹配第一个字母

时间:2015-05-20 15:45:03

标签: regex perl match

我希望将一个字符串中的单词的第一个字母与另一个字母相匹配。在这个例子中,字母H:

25HB matches to HC

我正在使用如下所示的匹配运算符:

my ($match) = ( $value =~ m/^d(\w)/ );

与数字不匹配,但第一个匹配的单词字符。我怎么能纠正这个?

4 个答案:

答案 0 :(得分:1)

正则表达式不符合你的想法:

m/^d(\w)/ 

匹配“行首” - 字母d,然后是单个word character

您可能需要:

m/^\d+(\w)/ 

然后从行首开始匹配一个或多个数字,然后抓取第一个word character

E.g:

my $string = '25HC'; 

my ( $match ) =( $string =~ m/^\d+(\w)/ );
print $match,"\n";

打印H

答案 1 :(得分:1)

您可以尝试^.*?([A-Za-z])

以下代码返回:

ITEM: 22hb
MATCH: h

ITEM: 33HB
MATCH: H

ITEM: 3333
MATCH:

ITEM: 43 H
MATCH: H

ITEM: HB33
MATCH: H

脚本。

#!/usr/bin/perl

my @array = ('22hb','33HB','3333','43 H','HB33');
for my $item (@array) {
    my $match = $1 if $item =~ /^.*?([A-Za-z])/;
    print "ITEM: $item \nMATCH: $match\n\n";
}

答案 2 :(得分:1)

你不清楚你想要什么。如果要将字符串中的第一个字母与字符串中的相同字母匹配:

m{
  (              # start a capture
    [[:alpha:]]  # match a single letter
  )              # end of capture
  .*?            # skip minimum number of any character
  \1             # match the captured letter
}msx;            # /m means multilines, /s means . matches newlines, /x means ignore whitespace in pattern

有关详细信息,请参阅perldoc perlre

<强>附录:

如果用词来表示任何字母数字序列,这可能更接近你想要的:

m{
  \b             # match a word boundary (start or end of a word)
  \d*            # greedy match any digits
  (              # start a capture
    [[:alpha:]]  # match a single letter
  )              # end of capture
  .*?            # skip minimum number of any character
  \b             # match a word boundary (start or end of a word)
  \d*            # greedy match any digits
  \1             # match the captured letter
}msx;            # /m means multilines, /s means . matches newlines, /x means ignore whitespace in pattern

答案 3 :(得分:0)

我相信这就是你要找的东西:

(如果您能提供更清晰的例子,我们可以帮助您更好)

以下代码采用两个字符串,并在两个字符串中找到第一个非数字字符:

my $string1 = '25HB';
my $string2 = 'HC';

#strip all digits
$string1 =~ s/\d//g;
foreach my $alpha (split //, $string1) {
    # for each non-digit check if we find a match
    if ($string2 =~ /$alpha/) {
        print "First matching non-numeric character: $alpha\n";
        exit;
    }
}