2010-05-26 128 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); 

这将是更快,但如果你通过它的垃圾,你会得到垃圾回来。

相关问题