比方說,我有一個字符串,像這樣:正則表達式從字符串中刪除開始和結束字符?
$file = 'widget-widget-newsletter.php';
我想使用的preg_replace()去除前綴widget-
和刪除後綴.php
。是否可以使用一個正則表達式來實現這一切?
生成的字符串應該是widget-newsletter
。
比方說,我有一個字符串,像這樣:正則表達式從字符串中刪除開始和結束字符?
$file = 'widget-widget-newsletter.php';
我想使用的preg_replace()去除前綴widget-
和刪除後綴.php
。是否可以使用一個正則表達式來實現這一切?
生成的字符串應該是widget-newsletter
。
$file = preg_replace('/^widget-|\.php$/', '', $file);
$name = preg_replace(array('%^widget-%', '%-%', '%\.php$%'), array('','_',''), $file);
應該這樣做。
或者更一般的(假設前綴變爲第一-
和後綴在最後.
開始):
$name = preg_replacearray('%^.*?-%', '%-%', '%\.(?!.*?\.).*?$%'), array('','_',''), $file);
如果您提供的模式陣列和更換的陣列的功能,然後每個圖案被相應的替換替換。
更新:
當你刪除的要求-
通過_
更換,substr()
的確是更適合:
$name = substr($file, 7, -4);
爲什麼不使用substr
?更簡單,更快。
從the manual描述替換參數的:
的字符串或使用字符串來替換陣列。如果此參數是字符串,並且模式參數是數組,則所有模式都將被該字符串替換。
聽起來像你可以使用一個數組的前綴和後綴模式的模式參數,只是把空字符串作爲替代。
不要把它想成剝離兩端,而是作爲提取中間:
$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);
這將是更快,但如果你通過它的垃圾,你會得到垃圾回來。
謝謝,我實際上使用你的解決方案,但接受Kugelman的答案。 – John 2010-05-26 22:02:59