Perl-get-first";字;从输入字符串

Perl-get-first";字;从输入字符串,perl,string,regex,Perl,String,Regex,我试图编写一个Perl程序,从文本文件中读入行,并为每行提取行中的第一个“单词”,并根据返回的字符串执行不同的操作 主循环如下所示: while(<AXM60FILE>) { $inputline = $_; ($start) = ($inputline =~ /\A(.*?) /); perform something, based on the value of string in $start } while(){ $inputline=$\u3; ($s

我试图编写一个Perl程序,从文本文件中读入行,并为每行提取行中的第一个“单词”,并根据返回的字符串执行不同的操作

主循环如下所示:

while(<AXM60FILE>) {

   $inputline = $_;

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

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

}
while(){
$inputline=$\u3;
($start)=($inputline=~/\A(.*?/);
根据$start中字符串的值执行某些操作
}
输入文件实际上是一个参数文件,参数名称和参数值用冒号(“:”)分隔。冒号前后可以有空格或制表符

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

参数1:XXXXXXXXXX
参数2:XXXXXXXXXXXX
参数3:XXXXXXXXXXXXXX
参数4:XXXXXXXXXXXX

“($start)=($inputline=~/\A(.*)/);”对于“param2”示例和“param3”示例来说都可以,其中第一个单词以空白/空格结尾,但是如何处理“param1”和“param4”情况,即参数名称后面紧跟冒号

另外,如果“空白”是一个或多个制表符,而不是空白/空格字符,该怎么办

谢谢, 吉姆

这将匹配除空格和行首的
之外的任何内容。
或使用
拆分

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

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

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

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

定义“单词”:英语单词、程序标识符、以空格为界的非空格块、字母、字母数字等。Eugene,我一直在使用您的第一个建议进行更多的测试,我想确认:通过“空白”,是否包括制表符?另外,你能简单地解释一下你使用的正则表达式是如何工作的吗?JimHi,我想我不太清楚的是\A和插入符号^,我以为是锚。这两种方法都是多余的吗?Jim@user555303:请参阅:
\s
匹配空格字符、集合
[\\t\r\n\f]
和其他字符。字符类第一个位置的特殊字符
^
表示一个否定字符类,它与括号中的字符以外的任何字符都匹配。感谢您的解释!吉姆
my ($key, $value) = split /\s*:\s*/, $inputline, 2;