簡體   English   中英

正則表達式刪除下划線和字符串

[英]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']
);

您可能會注意到表情和我的表情有兩個區別:

  1. 您的未定界。

  2. 我的是錨定的,即只有在文件名末尾出現_normal時,它才會刪除。

使用非捕獲組,您也可以這樣嘗試:

$prof_img = preg_replace('/(.+)(?:_normal)(.+)/', '$1$2', $prof_img);

它將保留所需的部分作為匹配項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM