我需要使用PHP正则表达式来删除此网址末尾的“_normal”。
http://a0.twimg.com/profile_images/3707137637/8b020cf4023476238704a9fc40cdf445的 _normal .JPEG
这样就变成了
http://a0.twimg.com/profile_images/3707137637/8b020cf4023476238704a9fc40cdf445.jpeg
我试过
$prof_img = preg_replace('_normal', '', $prof_img);
但是下划线似乎是在抛弃它。
答案 0 :(得分:7)
正如其他人所说,str_replace
可能是这个简单例子的最佳选择。
您的特定代码的问题在于您的正则表达式字符串是无限制的,您需要这样做:
$prof_img = preg_replace('/_normal/', '', $prof_img);
请参阅PCRE regex syntax以获取参考。
下划线被视为PCRE中的正常角色,并不会丢掉任何东西。
如果您要求只匹配文件名末尾的_normal
,您可以使用:
$prof_img = preg_replace('/_normal(\.[^\.]+)$/', '$1', $prof_img);
有关其工作原理的详情,请参阅preg_replace
。
答案 1 :(得分:3)
尝试使用str_replace;对于像这样的东西,它比正则表达式更有效。
但是,如果要使用正则表达式,则需要使用分隔符:
preg_replace('|_normal|','', $url);
答案 2 :(得分:3)
str_replace
应该有用。
$prof_img = str_replace('_normal', '', $prof_img);
答案 3 :(得分:1)
您只是忘了在正则表达式周围添加分隔符。
http://www.php.net/manual/en/regexp.reference.delimiters.php
使用PCRE功能时,需要使用模式 由分隔符括起来。分隔符可以是任何非字母数字, 非反斜杠,非空白字符。
经常使用的分隔符是正斜杠(/),哈希符号(#)和 波浪(〜)。以下是有效分隔的所有示例 图案。
$prof_img = preg_replace('/_normal/', '', $prof_img);
$prof_img = preg_replace('#_normal#', '', $prof_img);
$prof_img = preg_replace('~_normal~', '', $prof_img);
答案 4 :(得分:0)
您可以先使用分解URL,进行替换并将它们粘在一起,即
$url = 'http://a0.twimg.com/profile_images/3707137637/8b020cf4023476238704a9fc40cdf445_normal.jpeg';
$parts = pathinfo($url);
// transform
$url = sprintf('%s%s.%s',
$parts['dirname'],
preg_replace('/_normal$/', '', $parts['filename']),
$parts['extension']
);
你可能会注意到你的表达与我的两个不同之处:
你的未被分隔。
Mine已锚定,即如果它出现在文件名的 end ,它只会删除_normal
。
答案 5 :(得分:0)
使用非捕获组,您也可以尝试这样:
$prof_img = preg_replace('/(.+)(?:_normal)(.+)/', '$1$2', $prof_img);
它会将所需部分保持匹配。