使用Perl中的正则表达式匹配字符

时间:2013-01-11 16:32:14

标签: regex perl

我正在尝试逐行阅读文档,并且只对字母中的某些字符感兴趣,而不是新行字符。

我有以下内容:

@chars = split //;

for $char (@chars) {
  if (   ($pos % 16569 == 1719)
      || ($pos % 16569 == 8251)
      || ($pos % 16569 == 10238)) {
    print FILE_OUT "$char\n";
  }

  if ($char == m/[A-Z]/) {
    $pos++;
  }

}

正则表达式m/[A-Z]/无法匹配,因为$pos永远不会增加。是否可以匹配Perl中的单个char,或者此操作仅允许用于字符串?如果是这样,有办法解决这个问题吗?

2 个答案:

答案 0 :(得分:5)

您可能代表=~而不是====是相等的数字比较。 =~在运算符的左侧调用常规模式匹配。

哦,你也应该use strictuse warnings,特别是在例子中。

欢迎使用StackOverflow。

答案 1 :(得分:3)

这可能有更优雅的方法,但您遇到的问题是您使用的是错误的操作符。 ==表示“数字,等于”;在这种情况下,你问的是$ char是否匹配$_与正则表达式的匹配(这不是你想要的!)

相反,您应该使用正则表达式匹配运算符:=~