2017-04-18 58 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

完美地工作,以及當「字」在字符串中的不同位置。謝謝 –

相關問題