我目前正在研究一些小代码,因为我的一所大学“销毁”了xml文档。我想在文档中找到所有y =“\ d +”并将数字增加+3。我的尝试是这样的:
$path_to_file = 'testing.xml';
$file_contents = file_get_contents($path_to_file);
if(preg_match('/y="\d+"/', $file_contents, $bef)){
$length = count($bef);
for($i=0; $i<$length; $i++){
if($bef[$i]!=0){
$file_contents = str_replace($bef[$i], 'y="'. $bef[$i]+3 .'"', $file_contents);
}
}
file_put_contents($path_to_file,$file_contents);
}
else{
echo 'not found';
}
它似乎找到了文档中的第一个数字,但我无法弄清楚如何搜索2.,3。等。有什么资源可以给我,我可以找到解决问题的方法?
编辑:
显示我的问题:
我有xml代码,例如“&lt; graphic-area y =”125“x =”324“width =”bla“height =”bla“&gt;&lt; / graphic-area&gt;”等等。代码是后来生成了.pdf文件。所以我的大学没有添加修剪到网站,所以每个y属性,除了y =“0”是3毫米太低。我们有60多页,可以说有400多个具有y属性的区域。所以我需要一个PHP代码来修复y属性。 这个解决方案工作正常,没有'25 .2'数字,因此没有带点的数字。解决方法是使用两种不同的模式,然后在点之前获取数字并增加它。这是没有“253.2232”解决方案的最佳答案的代码。
$path_to_file = 'testing.xml';
$file_contents = file_get_contents($path_to_file);
$pattern = '/y="(\d+)"/';
$new_contents = preg_replace_callback($pattern, 'add_three', $file_contents);
file_put_contents($path_to_file,$new_contents);
function add_three($matches){
return 'y="' . (3 + (int)$matches[1]) . '"';
}
希望它有助于某人
答案 0 :(得分:1)
$path_to_file = 'testing.xml';
$file_contents = file_get_contents($path_to_file);
$pattern = '/y="(\d+\.?\d*)"/'; // Optional dot follower by optional digits
$new_contents = preg_replace_callback($pattern, 'add_three', $file_contents);
file_put_contents($path_to_file,$new_contents);
function add_three($matches){
return 'y="' . (3 + (float)$matches[1]) . '"'; // Cast to float not int, since we can do floats too
}
这将使add_three
在文档中匹配。
答案 1 :(得分:0)
您需要使用preg_match_all
,因为preg_match
仅返回1
,0
或false
。
因此:
if (preg_match_all('/y="\d+"/', $file_contents, $matches)) {
foreach ($matches as $match) {
// $match will contain information about the current match
}
}