2010-05-26 108 views
3

比方說,我有一個字符串,像這樣:正則表達式從字符串中刪除開始和結束字符?

$file = 'widget-widget-newsletter.php'; 

我想使用的preg_replace()去除前綴widget-和刪除後綴.php。是否可以使用一個正則表達式來實現這一切?

生成的字符串應該是widget-newsletter

回答

8
$file = preg_replace('/^widget-|\.php$/', '', $file); 
1
$name = preg_replace(array('%^widget-%', '%-%', '%\.php$%'), array('','_',''), $file); 

應該這樣做。

或者更一般的(假設前綴變爲第一-和後綴在最後.開始):

$name = preg_replacearray('%^.*?-%', '%-%', '%\.(?!.*?\.).*?$%'), array('','_',''), $file); 

如果您提供的模式陣列和更換的陣列的功能,然後每個圖案被相應的替換替換。

更新:

當你刪除的要求-通過_更換,substr()的確是更適合:

$name = substr($file, 7, -4); 
4

爲什麼不使用substr?更簡單,更快。

+0

謝謝,我實際上使用你的解決方案,但接受Kugelman的答案。 – John 2010-05-26 22:02:59

0

the manual描述替換參數的:

的字符串或使用字符串來替換陣列。如果此參數是字符串,並且模式參數是數組,則所有模式都將被該字符串替換。

聽起來像你可以使用一個數組的前綴和後綴模式的模式參數,只是把空字符串作爲替代。

2

不要把它想成剝離兩端,而是作爲提取中間:

$file = 'widget-widget-newsletter.php'; 
if (preg_match('/^widget\-(.+)\.php$/i', $file, $matches)) 
    echo "filename is " . $matches[1][0]; 

當然,如果「小窗口」和「.PHP」完全是靜態的,總是會在那裏,你可以只使用substr

echo "filename is " . substr($file, 7, -4); 

這將是更快,但如果你通過它的垃圾,你會得到垃圾回來。

相關問題