假设我有一个像这样的字符串:
$file = 'widget-widget-newsletter.php';
我想使用preg_replace()删除前缀widget-
并删除后缀.php
。是否可以使用一个正则表达式来实现这一切?
结果字符串应为widget-newsletter
。
答案 0 :(得分:8)
$file = preg_replace('/^widget-|\.php$/', '', $file);
答案 1 :(得分:4)
为什么不使用substr
?更简单,更快捷。
答案 2 :(得分:2)
不要认为它剥离了两端,而是提取中间:
$file = 'widget-widget-newsletter.php';
if (preg_match('/^widget\-(.+)\.php$/i', $file, $matches))
echo "filename is " . $matches[1][0];
当然,如果“widget-”和“.php”完全是静态的并且总是在那里,那么你可以使用substr
:
echo "filename is " . substr($file, 7, -4);
那会快得多,但是如果你把垃圾扔掉,你就会得到垃圾回收。
答案 3 :(得分:1)
$name = preg_replace(array('%^widget-%', '%-%', '%\.php$%'), array('','_',''), $file);
应该这样做。
或更一般(假设前缀转到第一个-
,后缀从最后.
开始):
$name = preg_replacearray('%^.*?-%', '%-%', '%\.(?!.*?\.).*?$%'), array('','_',''), $file);
如果您提供了一系列模式和一系列替换函数,那么每个模式都会被替换为替换。
<强>更新强>
当您删除-
替换_
的要求时,substr()
确实更适合:
$name = substr($file, 7, -4);
答案 4 :(得分:0)
来自替换参数的the manual描述:
包含要替换的字符串的字符串或数组。如果此参数是字符串且pattern参数是数组,则所有模式都将替换为该字符串。
听起来你可以使用带有前缀和后缀模式的数组作为pattern参数,只需将空字符串作为替换。