preg_replace 的正则表达式无法与括号匹配?

REGEX with preg_replace cannot match with parantheses?

preg_replace是否与图片名称中的括号冲突?

这是我的代码:

Pattern: /\/images\/upload\/image\/201808\/thumbnail(3).jpg/

Replacement: some_domain_url/images/upload/image/201808/thumbnail(3).jpg

Content: <img src="/images/upload/image/201808/thumbnail(3).jpg" alt="" />

结果:不替换。我尝试用 %28 替换括号,但 %29 也不起作用。

补充:模式和替换存储在动态数组中。它必须由 REGEX 替换。 objective是将所有本地图片路径替换为云存储。

REGEX专家可以指点一下吗?

您需要像这样转义括号:

\(3\).jpg

是的,括号是正则表达式中的特殊字符。他们需要逃脱。但是你让这比它需要的更困难。只需使用 str_replace,因为您没有使用正则表达式的任何好处。

str_replace('/images/upload/image/201808/thumbnail(3).jpg', 'some_domain_url/images/upload/image/201808/thumbnail(3).jpg', '<img src="/images/upload/image/201808/thumbnail(3).jpg" alt="" />');

i 如果您想不区分大小写:

str_ireplace('/images/upload/image/201808/thumbnail(3).jpg', 'some_domain_url/images/upload/image/201808/thumbnail(3).jpg', '<img src="/images/upload/image/201808/thumbnail(3).jpg" alt="" />');

或者...正确的冗长方式:

$dom = new domdocument();
$dom->loadhtml('<img src="/images/upload/image/201808/thumbnail(3).jpg" alt="" />', LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$imgs = $dom->getelementsbytagname('img');
if(strpos($imgs[0]->getAttribute('src'), '/images/upload/image/201808/thumbnail(3).jpg') !== FALSE) {
    $imgs[0]->setAttribute('src', 'some_domain_url' . $imgs[0]->getAttribute('src'));
    echo $dom->saveHTML();
}

https://3v4l.org/au5Du