【问题标题】:perl regex ( regular expression ) capturing using parentheses not printing $1 or $2 variables as expectedperl 正则表达式(正则表达式)使用括号捕获未按预期打印 $1 或 $2 变量
【发布时间】:2014-11-23 21:43:30
【问题描述】:

好的,我正在学习如何在 perl 中使用正则表达式,这是我的代码:

my $name = 'Tom Anderson';

if( $name =~ /(\w) (\w)/ )
{
    print "Good\n";
    print "$1 + $2";
}

输出:good m + A

我的理解是正则表达式会检查$name如下:

一个单词字符后跟一个空格,然后是另一个单词字符,这不是 100% 工作的。如果有人输入另一个名字,说一个中间名 if 语句仍然有效。我只想要两个名字,别无其他。为什么有人进三分就成功了?

当我打印 $1 和 $2 时使用括号捕获给我mA。这是为什么?为什么捕获不给我TomAnderson

【问题讨论】:

  • $name =~ /(\w+) (\w+)/ 它将匹配\w class char 1 次或多次。
  • 好的,如果我只想要两个名字而不是 3,我该如何限制数量?
  • \w 代表字母,\w+ 代表单词。 /(\w+) (\w+)/ 匹配两个以空格分隔的单词。

标签: regex perl


【解决方案1】:

修改你的正则表达式:

$name =~ /(\w+) (\w+)/;

您还可以将此正则表达式锚定到行的开头和结尾:

$name =~ /^(\w+) (\w+)$/;

希望这会有所帮助。

【讨论】:

  • 澄清一下,+ 表示匹配一个或多个单词字符。 \w 本身匹配单个单词字符,因此您的原始正则表达式匹配空格两侧的一个字符。
  • 如何将正则表达式限制为两个名称而不是 3 个?
  • 使用第二个正则表达式锚定到行的开始 ^ 和结束 $。
猜你喜欢
  • 1970-01-01
  • 2015-01-20
  • 2013-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-06
  • 1970-01-01
  • 2020-02-21
相关资源
最近更新 更多