Perl - 从输入字符串中获取第一个“单词”

时间:2011-02-11 19:34:30

标签: perl string regex

我正在尝试编写一个从文本文件中读取行的Perl程序,并且,对于每一行,从行中提取第一个“单词”,并根据返回的字符串执行不同的操作。 / p>

主循环如下所示:

while(<AXM60FILE>) {

   $inputline = $_;

   ($start) = ($inputline =~ /\A(.*?) /);

perform something, based on the value of string in $start

}

输入文件实际上是一个参数文件,带有parameter_name和parameter_value,用冒号(“:”)分隔。在冒号之前或之后可以有空格或制表符。

因此,该文件看起来(例如)如下所示:

  

param1:xxxxxxxxxxxx
  param2:xxxxxxxxxxxxx
  param3:xxxxxxxxxxxxxxxxx
  param4:XXXXXXXXXXXXX

那个“($ start)=($ inputline =〜/\A(.*?)/);”适用于“param2”示例和“param3”示例,其中第一个单词由空格/空格终止,但我如何处理“param1”和“param4”情况,其中parameter_name紧跟冒号?

另外,如果“空白”是制表符或制表符,而不是空格/空格字符呢?

谢谢, 吉姆

2 个答案:

答案 0 :(得分:9)

这将涵盖您的所有案例,然后是:

my ($key, $value) = split /\s*:\s*/, $inputline, 2;

(或者,用英语,将$inputline分成最多两个元素,用任意数量的空格,冒号和任意数量的空格分隔。)

答案 1 :(得分:6)

($start) = $inputline =~ /\A([^:\s]+)/;

这将匹配除空格之外的任何内容以及行尾的: 或者使用split

($start) = split /[:\s]+/, $inputline, 2;