我在文本文件中有以下几行:
<Entry>
<Key argument="ComputerNames"/>
<Value type="string" argument="localhost,localhost,engine1,engine2"/></Entry>
<Entry>
<Key argument="BranchIDMultiple"/>
<Value type="int" argument="1"/></Entry>
我知道如何找到拥有ComputerNames的行。我知道如何阅读下一行。
我需要按如下方式解析行,其中参数的数量可以是动态的。解析输出应为:
@result = $result[0]=localhost, $result[1]=localhost, $result[2]=engine1, $result[3]=engine2.
必须至少有一个论点,但也可以有更多......
我无法构建正确的正则表达式来完成拆分。有什么想法吗?
答案 0 :(得分:0)
假设输入包含以下xml行。
由于您已经提到过您知道如何提取此行。我把那部分留给了你。
获得此行后,请使用以下正则表达式
String regex ="argument=\"[a-zA-Z0-9,]*\"" ;
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
String[] op;
if(matcher.find())
{
op = input.subString(matcher.start(),matcher.end()).split(",");
}
答案 1 :(得分:0)
好的,这就是我所拥有的:
---经过多次不同的试验,我终于能够得到一些有效的东西。见下文:
BEGIN { require 5.8.0; }
use strict;
use warnings;
# string to test regular expressions
my $test_string = '<Value type="string" argument="400teets,localhost,localhost,engine1,engine2,engine50,engine100,100afdasfdas"/></Entry>';
# print out the initial string
print "The initial string is: $test_string\n\n";
# first set of arguments - all words that have a comma after them
my @first_words = ($test_string =~ /(\w+),/g);
# print first set of arguments
print "\nFirst set of arguments found\n";
foreach my $word (@first_words) {
print "$word\n";
}
# second set of arguments - all words that have a comma before them
my @last_words = ($test_string =~ /,(\w+)/g);
#print second set of arguments
print "\nSecond set of arguments found\n";
foreach my $word (@last_words) {
print "$word\n";
}
#merge the sets by popping the last element off of last_words array and pushing it into the first_words array
push(@first_words,pop(@last_words));
#print the results
print "\nMerged Sets\n";
foreach my $word (@first_words) {
print "$word\n";
}
# END OF PROGRAM
---真的,如果你排除所有的打印陈述和评论,你真正需要的就是这三行:
my @first_words = ($test_string =~ /(\w+),/g);
my @last_words = ($test_string =~ /,(\w+)/g);
push(@first_words,pop(@last_words));
---这是输出:
初始字符串是:
找到第一组参数 400teets 本地主机 本地主机 引擎1 引擎2 engine50 engine100
找到第二组论点 本地主机 本地主机 引擎1 引擎2 engine50 engine100 100afdasfdas
合并集 400teets 本地主机 本地主机 引擎1 引擎2 engine50 engine100 100afdasfdas