Удалить конкретное вхождение из строки

#php #regex #string

#php #регулярное выражение #строка

Вопрос:

У меня есть переменная с именем $name , которая содержит название проекта. В большинстве случаев имя принимает следующую форму

 OCT16: Some Project
  

Однако он не всегда находится в таком формате, иногда у него нет префикса месяц / год.

То, что я пытаюсь сделать, это. Если у него действительно есть префикс MMMYY: тогда мне нужно удалить эту часть из имени. Теперь я знаю, что, вероятно, мог бы использовать что-то вроде preg_replace для удаления этого конкретного шаблона из строки, но как мне проверить, что он имеет этот шаблон в первую очередь?

Любой совет приветствуется.

Спасибо

Комментарии:

1. Попробуйте использовать preg_replace('~d{6}$~', '', $s) , чтобы удалить 6 цифр в конце строки.

2. Как я уже говорил, это не всегда начинается так, поэтому мне нужно сначала проверить

3. Зачем проверять, preg_replace также выполняет проверку перед заменой? Если совпадения не происходит, preg_replace возвращает неизмененную строку.

4. Знаете ли вы, с каким регулярным выражением мне нужно было бы протестировать?

5. sometimes it does not have the month/year prefix . Означает ли это , что это может быть OCT: Some Project ?

Ответ №1:

Используйте следующий подход:

 $project_name = 'OCT16: Some Project';
$project_name = preg_replace("/b[A-Z]{3,4}d{2}:s?/u", "", $project_name);

print_r($project_name);  // "Some Project"

// another test case:
$project_name = ' Some Project OCT16: some text';
....
print_r($project_name);  // "Some Project some text"
  

Ответ №2:

Ваше регулярное выражение на самом деле должно быть следующим:

 (JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)d{2}:s?
  

и preg_replace просто вернет исходную строку, если не найдет совпадения.