for ($i=0; $i<10; $i++)
{
my $v1 = $sel->get_text("//body[\@id='ext-gen3']/div[10]/div[2]/div/div/div/div/div/div/div/div/div/div[2]/div/**div**/table/tbody/tr/td/div/div");
my $v2 = $sel->get_text("//body[@\id='ext-gen3']/div[10]/div[2]/div/div/div/div/div/div/div/div/div/div[2]/div/**div**/table/tbody/tr/td[2]/div/div")
print ($v1 . $v2);
}
对于每次迭代,它必须找到从div[10]
&amp;开始的第14个元素。将其替换为增加的div[ ]
元素(例如:如果第14个元素为div
,请将其替换为div[2]
。在下一个迭代中找到第14个元素,即div[2]
&amp; replace它由div[3]
&amp;等等。
通过使用PATTERN匹配,它不能。是否有任何方法使用正则表达式来查找特定元素&amp;替换它?我怎么能这样做?
my $a = "//body[\@id='ext-gen3']/div[10]/div[2]/div/div/div/div/div/div/div/div/div/div[2]/div/**div**/table/tbody/tr/td/div/div";
my @arr = split ('/' , $a);
print "@arr \n";
my $size1 = @arr;
print "$size1\n";
print $arr[16];
foreach my $a2 (@arr)
{
print "$a2 \n";
}
my $b = "//body[\@id='ext-gen3']/div[10]/div[2]/div/div/div/div/div/div/div/div/div/div[2]/div/**div**/table/tbody/tr/td[2]/div/div";
上述问题中提到的两个变量为v1&amp; v2(编辑为$ a和$ b),修改必须适用于它们。我想我几乎接近你所说的。能否请你进一步帮助我
答案 0 :(得分:1)
use 5.010;
my $xpath = q(//body[@id='ext-gen3']/div[10]/div[2]/div/div/div/div/div/div/div/div/div/div[2]/div/div/table/tbody/tr/td/div/div);
for my $i (0..10) {
my @nodes = split qr'/', $xpath;
$nodes[16] .= "[$i]" unless 0 == $i;
say join '/', @nodes;
}
结果:
//body[@id='ext-gen3']/div[10]/div[2]/div/div/div/div/div/div/div/div/div/div[2]/div/div/table/tbody/tr/td/div/div
//body[@id='ext-gen3']/div[10]/div[2]/div/div/div/div/div/div/div/div/div/div[2]/div/div[1]/table/tbody/tr/td/div/div
//body[@id='ext-gen3']/div[10]/div[2]/div/div/div/div/div/div/div/div/div/div[2]/div/div[2]/table/tbody/tr/td/div/div
//body[@id='ext-gen3']/div[10]/div[2]/div/div/div/div/div/div/div/div/div/div[2]/div/div[3]/table/tbody/tr/td/div/div
//body[@id='ext-gen3']/div[10]/div[2]/div/div/div/div/div/div/div/div/div/div[2]/div/div[4]/table/tbody/tr/td/div/div
//body[@id='ext-gen3']/div[10]/div[2]/div/div/div/div/div/div/div/div/div/div[2]/div/div[5]/table/tbody/tr/td/div/div
//body[@id='ext-gen3']/div[10]/div[2]/div/div/div/div/div/div/div/div/div/div[2]/div/div[6]/table/tbody/tr/td/div/div
//body[@id='ext-gen3']/div[10]/div[2]/div/div/div/div/div/div/div/div/div/div[2]/div/div[7]/table/tbody/tr/td/div/div
//body[@id='ext-gen3']/div[10]/div[2]/div/div/div/div/div/div/div/div/div/div[2]/div/div[8]/table/tbody/tr/td/div/div
//body[@id='ext-gen3']/div[10]/div[2]/div/div/div/div/div/div/div/div/div/div[2]/div/div[9]/table/tbody/tr/td/div/div
//body[@id='ext-gen3']/div[10]/div[2]/div/div/div/div/div/div/div/div/div/div[2]/div/div[10]/table/tbody/tr/td/div/div
答案 1 :(得分:-1)
嗯,所有元素都用 / 分隔,对吗?因此,您可以使用本机拆分方法基于/拆分div [10]之后的文本部分。将其存储在数组 $ arr 中。合并它以查找字符串的长度,例如 $ len 。找到 div [10] 的索引,例如 $ orig_index 。然后你找到第14个元素,做一个正则表达式匹配,看看它在哪个格式:
$arr[13] =~ /div([\d+])?/;
if ($1) {
$arr[13] =~ /div[$1]/div[($1+1)]/e;
}
else {
$arr[13] = div[2];
}
现在更改了第14个元素,连接数组以从div [10]和第14个元素之间的部分获取部分的新输出字符串:
{
local $" = '';
$newstring = "@arr";
}
splice($originalstring,$orig_index,$len,$newstring);
我认为那样做。