比方说,我有一个字符串,像这样:正则表达式从字符串中删除开始和结束字符?
$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