Регулярное выражение для удаления начальных и конечных символов из строки?

Предположим, у меня есть строка вроде:

$file = 'widget-widget-newsletter.php'; 

Я хочу использовать preg_replace () для удаления widget- префикса и удалить суффикс .php . Можно ли использовать одно регулярное выражение для достижения всего этого?

Полученная строка должна быть widget-newsletter .

Related of "Регулярное выражение для удаления начальных и конечных символов из строки?"

 $file = preg_replace('/^widget-|\.php$/', '', $file); 

Почему бы не использовать substr ? Гораздо проще и быстрее.

Не думайте об этом как об отрыве концов, а как об извлечении середины:

 $file = 'widget-widget-newsletter.php'; if (preg_match('/^widget\-(.+)\.php$/i', $file, $matches)) echo "filename is " . $matches[1][0]; 

Конечно, если «widget-» и «.pp» полностью статичны и всегда будут там, вы можете просто использовать 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); 

Из ручного описания параметра замены:

Строка или массив со строками для замены. Если этот параметр является строкой, а параметр pattern является массивом, все шаблоны будут заменены этой строкой.

Похоже, вы можете использовать массив с шаблонами префикса и суффикса в нем для параметра шаблона и просто поместить пустую строку в качестве замены.