Как удалить начальные символы и символ запроса с помощью регулярного выражения в PHP?

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

$item['options']['Size'] = preg_replace('/^[^-]*/', '', $item['options']['Size']);

Итак, скажем, у меня есть следующая строка:

ТЕСТ123-150С200

Текущая функция preg_replace оставит мне:

-150X200

Я хотел бы закончить с:

150X200

Может ли кто-нибудь предложить, как я могу обновить регулярное_выражение для достижения этой цели. Спасибо


person Liam Fell    schedule 19.11.2015    source источник
comment
Добавьте дефис в конце шаблона. $item['options']['Size'] = preg_replace('/^[^-]*-/', '', $item['options']['Size']);.   -  person Wiktor Stribiżew    schedule 19.11.2015
comment
А как насчет substr() ? $item['options']['Size'] = substr(preg_replace('/^[^-]*/', '', $item['options']['Size']),1 ); Запуск вновь сгенерированной строки на один шаг вперед, т.е.   -  person Jan    schedule 19.11.2015


Ответы (3)


Вы можете добавить дефис в конце шаблона.

$item['options']['Size'] = preg_replace('/^[^-]*-/', '', $item['options']['Size']);
                                                ^

Таким образом, дефис сопоставляется (= потребляется) и будет удален. Обратите внимание, что [^-] — это инвертированный класс символов, который соответствует любому символу, кроме -. Таким образом, дефис не соответствовал вашему исходному регулярному выражению.

Подход без регулярных выражений:

$item['options']['Size'] = ltrim(strstr($item['options']['Size'], '-'),'-');

См. демонстрацию IDEONE.

person Wiktor Stribiżew    schedule 19.11.2015
comment
Спасибо @stribizhev, это хороший подход. - person Liam Fell; 19.11.2015

В дополнение к данным ответам/комментариям вы также можете использовать положительный взгляд назад и заменить это:

<?php
$str = "TEST123-150X200";
$regex = '/.*(?<=-)/i';
$item['options']['Size'] = preg_replace($regex, '', $str);
// output: 150X200
?>

В качестве альтернативы (как описано в комментарии) начните отсчет с 1:

$item['options']['Size'] = substr(preg_replace('/^[^-]*/', '', $item['options']['Size']), 1);
person Jan    schedule 19.11.2015

Я не думаю, что для этого нужно регулярное выражение...

$str = "TEST123-150X200";
var_dump(end(explode("-", $str))); //string(7) "150X200"
var_dump(ltrim(strstr($str, "-"), "-"));//string(7) "150X200"
var_dump(substr(strrchr($str, "-"), 1) );//string(7) "150X200"
person Andrew    schedule 19.11.2015