Проверить строку с несколькими словами и числами - PullRequest
0 голосов
/ 28 июня 2019

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

Давайте использовать фрукты, например.В магазине у нас есть ручные имена, которые могут выглядеть следующим образом:

$manuals = [
    'dc-cn-13apple-frv4-5.pdf',
    'dc-cn-33_banana-strawberryv10-108.pdf',
    'dc-cn-32peachenv10-125.pdf',
    'dc-cn-23lemoncoconutwatermelonitv09-130.pdf'
];

Так что существует множество возможных комбинаций, важно то, что они всегда начинаются с 'dc-cn-', а затем с двухзначного числаэто важно для нас (это как ссылка на фрукт).

Далее следует несколько слов, чтобы описать фрукт, за которым сразу следуют 2 буквы, чтобы узнать на каком языке это руководство, и 'v08' или 'v10 'чтобы узнать версию.Иногда эти 2 буквы и цифры для версии поставляются с тире (например, -frv4).

Наконец, они всегда заканчиваются случайным 3-значным числом (автоматически присваиваемым используемой нами CMS), за которым следует'.pdf'.

Я пытался манипулировать своим массивом так:

foreach ($manuals as $manual) {
    if(preg_match('/^[0-9][0-9][\.]pdf$/', $manual)) {
        echo 'OK';
    }
}

Но пока мой REGEX ничего не соответствует, и я действительно чувствую, что понятия не имею, что яЯ делаю.

Это действительно помогло бы мне иметь возможность проверить первый номер ('dc-cn- 32 ', 'dc-cn- 13 '), 2 буквы в конце слова (' - fr v4 ',' peach en v10 'или' дыня it v09-130.pdf ') и 3 последние цифры (' melonitv09- 130 .pdf ').

Тогда я бы preg_split все это и начал сравнивать.

1 Ответ

1 голос
/ 28 июня 2019

Ваши примеры не обязательно соответствуют вашему описанию, но для каждого описания это регулярное выражение должно работать (но не проверено):

^dc-cn-\d{2}[a-zA-Z_\-]+-?\w{2}v\d+-\d{3}\.pdf$

Пояснение:

  • ^dc-cn- соответствует вашему префиксу с начала строки
  • , за которым следует \d{2} - двузначное число
  • , за которым следует [a-zA-Z_\-] - строка из 1 или более букв, дефисов или подчеркиваний (из ваших примеров)
  • с последующим -? - возможный рывок, который может или не может быть там
  • с последующим \w{2} - двухбуквенным языковым кодом
  • , за которым следует v\d+ - буква v и число
  • , за которым следует -\d{3} - трехзначный номер CMS
  • , за которым следует \.pdf$ - буквально, .pdf в конце строки

ОБНОВЛЕНИЕ: Если последний номер CMS не всегда 3-значный, но может состоять из 1 или 2 цифр (например, как в одном из приведенных выше примеров, тогда регулярное выражение становится

^dc-cn-\d{2}[a-zA-Z_\-]+-?\w{2}v\d+-\d{1,3}\.pdf$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...