[英]Regular Expression to remove underscore and string
我需要使用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);
但是下划線似乎使事情變得一團糟。
正如其他人所述, str_replace
可能是此簡單示例的最佳選擇。
您的特定代碼的問題是您的正則表達式字符串是無界的,您需要這樣做:
$prof_img = preg_replace('/_normal/', '', $prof_img);
有關參考,請參見PCRE regex語法 。
下划線在PCRE中被視為正常字符,不會丟掉任何東西。
如果只要求文件名末尾的_normal
匹配,則可以使用:
$prof_img = preg_replace('/_normal(\.[^\.]+)$/', '$1', $prof_img);
有關更多信息,請參見preg_replace
。
嘗試使用str_replace; 這樣的事情比正則表達式要有效得多。
但是,如果要使用正則表達式,則需要定界符:
preg_replace('|_normal|','', $url);
str_replace
應該工作。
$prof_img = str_replace('_normal', '', $prof_img);
您只是忘記在正則表達式周圍添加定界符。
http://www.php.net/manual/zh/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);
您可以先分解網址,執行替換並將其重新粘貼在一起,即
$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']
);
您可能會注意到表情和我的表情有兩個區別:
您的未定界。
我的是錨定的,即只有在文件名末尾出現_normal
時,它才會刪除。
使用非捕獲組,您也可以這樣嘗試:
$prof_img = preg_replace('/(.+)(?:_normal)(.+)/', '$1$2', $prof_img);
它將保留所需的部分作為匹配項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.