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

use*_*303 11 regex string perl

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

主循环看起来像这样:

while(<AXM60FILE>) {

   $inputline = $_;

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

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

}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

另外,如果"空白"是制表符还是制表符,而不是空格/空格字符呢?

谢谢,吉姆

Blr*_*rfl 9

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

my ($key, $value) = split /\s*:\s*/, $inputline, 2;
Run Code Online (Sandbox Code Playgroud)

(或者,在英语中,$inputline最多分为两个元素,由任意数量的空格,冒号和任意数量的空格分隔.)


Eug*_*ash 6

($start) = $inputline =~ /\A([^:\s]+)/;
Run Code Online (Sandbox Code Playgroud)

这将匹配除空格和:行首之外的任何内容.
或使用split:

($start) = split /[:\s]+/, $inputline, 2;
Run Code Online (Sandbox Code Playgroud)