#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
просто вернет исходную строку, если не найдет совпадения.