使用正则表达式在Perl中应用过滤器

时间:2017-09-22 21:00:09

标签: regex perl

我尝试使用perl中的regex从字符串中提取文本和数字。这是我的代码:

$line = "finish=100\n";
($var) = $line =~ /[a-z]+/;
($val) = $line =~ /[0-9]+/;

我的预期输出是$ var ="完成"和$ val = 100.但是当我运行代码$ var = 1和$ val = 1时。

任何帮助都将不胜感激!!

3 个答案:

答案 0 :(得分:4)

在正则表达式中使用捕获括号:

  <distributionManagement>
    <repository>
           <id>test</id>
           <url>Repo path</url>
    </repository>
 </distributionManagement>

请参阅perlre

答案 1 :(得分:1)

列表上下文中的正则表达式匹配(正则表达式不使用/g标志)返回

  • 如果失败则为空列表
  • 捕获的子字符串列表($1, $2, ...)如果成功且模式包含捕获组
  • 列表1如果成功且模式没有捕获任何内容

您的正则表达式匹配,但它们不包含任何捕获组,这就是您在1$var中获得$val的原因。

如果添加捕获组(/([a-z]+)//([0-9]+)/),则会获得匹配的子字符串。

请注意,在一场比赛中完成所有操作可能会更容易:

my ($var, $val) = $line =~ /^([a-z]+)=([0-9]+)$/;

通过这种方式,您还可以验证输入字符串是否具有预期的格式,并且不仅仅是"Cat o' 9 tails",而(使用您的原始正则表达式)将提取$var = "at"和{{1} }。

答案 2 :(得分:0)

你也可以在一个数组中得到两个值,也许用这个:

$val = "9"