假设我有一个字符串:
$file = 'widget-widget-newsletter.php';
我想使用 preg_replace() 函数来移除前缀
widget-
和后缀 .php
。是否可以使用一个正则表达式来实现这一点?最终的字符串应该是
widget-newsletter
。$file = preg_replace('/^widget-|\.php$/', '', $file);
不要把它看作是剥去端部,而是提取中间部分:
$file = 'widget-widget-newsletter.php';
if (preg_match('/^widget\-(.+)\.php$/i', $file, $matches))
echo "filename is " . $matches[1][0];
substr
:echo "filename is " . substr($file, 7, -4);
这样做会更快,但如果你传入垃圾数据,你会得到垃圾数据的返回结果。
$name = preg_replace(array('%^widget-%', '%-%', '%\.php$%'), array('','_',''), $file);
应该这样做。
或更一般地(假设前缀到第一个-
,后缀从最后一个.
开始):
$name = preg_replacearray('%^.*?-%', '%-%', '%\.(?!.*?\.).*?$%'), array('','_',''), $file);
如果您将模式数组和替换数组提供给函数,则每个模式都会被相应的替换所替换。
更新:
由于您删除了将-
替换为_
的要求,因此substr()
确实更适合:
$name = substr($file, 7, -4);