Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用php正则表达式搜索链接_Php_Regex - Fatal编程技术网

用php正则表达式搜索链接

用php正则表达式搜索链接,php,regex,Php,Regex,我使用c和c#进行编程,我使用一些第三方正则表达式库来识别链接模式。但是昨天,出于某种原因,有人让我改用php。我不熟悉php正则表达式,但我尝试过,没有得到预期的结果。我必须提取并替换表单中图像src的链接: <img src="/a/b/c/d/binary/capture.php?id=main:slave:demo.jpg"/> 但它不起作用,我遗漏了什么或者上面代码中有什么错误吗 更具体地说,假设我有一个图像标记,它将src作为 <img src="ANY_TH

我使用c和c#进行编程,我使用一些第三方正则表达式库来识别链接模式。但是昨天,出于某种原因,有人让我改用php。我不熟悉php正则表达式,但我尝试过,没有得到预期的结果。我必须提取并替换表单中图像src的链接:

<img src="/a/b/c/d/binary/capture.php?id=main:slave:demo.jpg"/>
但它不起作用,我遗漏了什么或者上面代码中有什么错误吗

更具体地说,假设我有一个图像标记,它将src作为

  <img src="ANY_THING/binary/capture.php?id=main:slave:demo.jpg"/>

在这里,任何东西都可以是任何东西,并且“/binary/capture.php?id=”对于所有情况都是固定的,“id=”后面的字符串是模式“main:slave:demo.jpg”,冒号前面的字符串将根据不同的情况进行更改,jpeg的名称也将有所不同。我希望把它换成新的

  <img src="/main/slave/demo.jpg"/>


由于我只有权在特定时间和限制时间修改php脚本,所以我希望在进行任何修改之前调试我的代码。谢谢。

首先,你可能知道

但是,请尝试:

$stringtoreplace = '<img src="/a/b/c/d/binary/capture.php?id=main:slave:demo.jpg"/>';
$new_str = preg_replace_callback(
    // The regex to match
    '/<img(.*?)src="([^"]+)"(.*?)>/i',
    function($matches) { // callback
        parse_str(parse_url($matches[2], PHP_URL_QUERY), $queries); // convert query strings to array
        $matches[2] = '/'.str_replace(':', '/', $queries['id']); // replace the url
        return '<img'.$matches[1].'src="'.$matches[2].'"'.$matches[3].'>'; // return the replacement
    },
    $stringtoreplace // str to replace
);
var_dump($new_str);
$stringtoreplace='';
$new\u str=preg\u replace\u回调(
//要匹配的正则表达式
“//我”,
函数($matches){//callback
parse_str(parse_url($matches[2],PHP_url_QUERY),$querys);//将查询字符串转换为数组
$matches[2]='/'.str_replace(':','/',$querys['id']);//替换url
返回“”;//返回替换项
},
$stringtoreplace//str要替换
);
var_dump($new_str);

谢谢您的回复。但我不知道为什么,它不起作用。我在本地试用过,效果很好。你确定你使用的测试数据正确吗?
$stringtoreplace = '<img src="/a/b/c/d/binary/capture.php?id=main:slave:demo.jpg"/>';
$new_str = preg_replace_callback(
    // The regex to match
    '/<img(.*?)src="([^"]+)"(.*?)>/i',
    function($matches) { // callback
        parse_str(parse_url($matches[2], PHP_URL_QUERY), $queries); // convert query strings to array
        $matches[2] = '/'.str_replace(':', '/', $queries['id']); // replace the url
        return '<img'.$matches[1].'src="'.$matches[2].'"'.$matches[3].'>'; // return the replacement
    },
    $stringtoreplace // str to replace
);
var_dump($new_str);