Perl-get-first";字;从输入字符串
我试图编写一个Perl程序,从文本文件中读入行,并为每行提取行中的第一个“单词”,并根据返回的字符串执行不同的操作 主循环如下所示: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
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;