繁体   English   中英

用php正则表达式搜索链接

[英]searching link with php regular expression

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

<img src="/a/b/c/d/binary/capture.php?id=main:slave:demo.jpg"/>

我只想要src中的路径,但引号可以是双精度或单精度,而且ID可能因大小写而异(此处为main:slave:demo.jpg)

我尝试以下代码

 $searchfor = '/src="(.*?)binary\/capture.php?id=(.+?)"/';
 $matches = array();
 while ( preg_match($searchfor, $stringtoreplace, $matches) == 1 ) {
   // here if mataches found, replace the source text and search again
   $stringtoreplace= str_replace($matches, 'whatever', $stringtoreplace);
 }

但这是行不通的,我错过了什么,或者上面的代码有任何错误吗?

更具体地说,假设我有一个图像标签,该标签将src设置为

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

在这里ANY_THING可以是任何值,并且“ /binary/capture.php?id=”将在所有情况下都是固定的,“ id =”之后的字符串的格式为“ main:slave:demo.jpg”,冒号之前的字符串为视情况而定,jpeg的名称也会有所不同。 我希望将其替换为

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

由于我仅有权在特定时间和限制时间内修改php脚本,因此我想在进行任何修改之前调试代码。 谢谢。

首先,您可能知道, 不应使用regex来操纵HTML

但是,请尝试:

$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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM