2017-04-18 59 views
-1
my @buildno = $mech->xpath('/html/body/form/table/tbody/tr[2]/td[3]/table 
/tbody/tr[2]/td/table/tbody/tr[1]/td/table/tbody/tr[1]/td', type => 
$mech->xpathResult('STRING_TYPE')); 

我有包含字符串上面的代码。我需要捕获字符串中数组中包含的以CSR开头的单词。只有一个元素@buildno[0]。我需要保留这个词,并删除字符串中的所有内容。我曾尝试使用m//的方式,但它只返回一个布尔值,告诉我该单词存在。我也尝试了s///,但是我只能删除我需要保留的单词,我无法想出一种方法来反转该功能。如何查找以指定字母开头的单词,然后删除字符串中的所有内容?

编辑 我已经设法将字符串拆分并放到一个新的数组中,所以每个字都是一个单独的索引。

my $buildno = join('', @buildno); 
my @build = split(' ',$buildno); 
print @build[1]; 

我在这种情况下寻找这个词是数组中的第二个元素,因为它是第二个单词@build[1]但是这个词可能并不总是字符串中的第二个字,也可能是第四个单词例如。我的目的是捕捉这个特定的单词供以后使用。

回答

1

您可以在捕获组匹配使用m//所期望的字存储,然后与匹配组更换整个原始字符串:

do {$_ = $1 if /(?:^|\s)(CSR\S*)/} foreach @buildno; 

演示:https://ideone.com/1l7YJb

+0

这之后删除一切,但不是之前这是我需要的词。另外,我可能错误地称之为“CSR1.1.2.BOI46”的“单词”,因此只有“CSR”被捕获,而不是在第一个时间段之后被捕获。 –

+0

@JamalMahroof:请参阅最新的答案。 –

+0

完美地工作,以及当“字”在字符串中的不同位置。谢谢 –

相关问题