Разделить на регулярные выражения где на конце может быть еще цифра Например MK1 или ПK4 МК ПК ПС ПКВ ПТ ППР К ПП Плюс учесть кириллице и латиницу То есть может быть ПT или ПТ Дальше разделить значение Буквы или цифры Все делать на PHP подробно объясняя

Я помогу создать решение на PHP для разделения строк по заданным шаблонам с учетом кириллицы, латиницы и необязательной цифры в конце. Разберу задачу подробно.

Постановка задачи

Нужно:

  1. Разделить входную строку на части, соответствующие шаблонам (МК, ПК, ПС, ПКВ, ПТ, ППР, К, ПП), где:
    • Буквы могут быть на кириллице или латинице (например, ПТ или ПT).
    • В конце шаблона может быть цифра (например, МК1, ПK4).
  2. Разделить результат на буквы и цифры.

Решение

Шаг 1: Создание регулярного выражения

Для распознавания шаблонов учтем:

  • Буквы: М, П, К, С, В, Т, Р (кириллица) или M, P, K, C, B, T (латиница).
  • Шаблоны: МК, ПК, ПС, ПКВ, ПТ, ППР, К, ПП.
  • Необязательная цифра в конце: \d? (0 или 1 цифра).
  • Кириллица и латиница: используем [ММM][ККK] для букв, допускающих обе раскладки.

Регулярное выражение будет выглядеть так:

text
/([ММM][ККK][ВВB]?[1-4]?|[ПP][ККK][ВВB]?[1-4]?|[ПP][СC][1-4]?|[ПP][ТТT][1-4]?|[ПP]{2}[РR][1-4]?|[ККK][1-4]?|[ПP]{2}[1-4]?)/u

Объяснение:

  • [ММM] — буква М (кириллица или латиница).
  • [ККK] — буква К (кириллица или латиница).
  • [ВВB]? — необязательная буква В/В/B.
  • [1-4]? — необязательная цифра от 1 до 4 (можно расширить до \d?, если нужны любые цифры).
  • | — разделяет варианты шаблонов (МК, ПК, ПС, ПКВ, ПТ, ППР, К, ПП).
  • /u — модификатор для поддержки Unicode (кириллица).

Шаг 2: Разделение на буквы и цифры

После нахождения совпадений:

  • Используем preg_match или preg_match_all для поиска шаблонов.
  • Для каждого совпадения отделим буквы ([А-ЯA-Z]+) и цифры (\d+).

Шаг 3: Код на PHP

Вот полный код с комментариями:

php
<?php // Входная строка (пример) $input = "МК1 ПК2 ПС ПКВ3 ПТ4 ППР К ПП МK4 ПT"; // Регулярное выражение для поиска шаблонов $pattern = '/([ММM][ККK][ВВB]?[1-4]?|[ПP][ККK][ВВB]?[1-4]?|[ПP][СC][1-4]?|[ПP][ТТT][1-4]?|[ПP]{2}[РR][1-4]?|[ККK][1-4]?|[ПP]{2}[1-4]?)/u'; // Находим все совпадения preg_match_all($pattern, $input, $matches); // Массив для хранения результатов $results = []; // Обрабатываем каждое совпадение foreach ($matches[0] as $match) { // Разделяем на буквы и цифры preg_match('/([А-ЯA-Z]+)(\d*)/u', $match, $parts); // Формируем результат $letters = $parts[1] ?? ''; // Буквы $number = $parts[2] ?? ''; // Цифра (если есть) $results[] = [ 'full' => $match, 'letters' => $letters, 'number' => $number ]; } // Вывод результатов echo "Результаты обработки:\n"; foreach ($results as $result) { echo "Полное совпадение: {$result['full']}, Буквы: {$result['letters']}, Цифра: {$result['number']}\n"; } ?>

Шаг 4: Объяснение кода

  1. Входная строка: $input содержит пример текста, например, "МК1 ПК2 ПС ПКВ3 ПТ4 ППР К ПП МK4 ПT".
  2. Регулярное выражение:
    • Разделяет строку на части, соответствующие шаблонам (МК, ПК и т.д.) с учетом кириллицы/латиницы и необязательной цифры.
    • preg_match_all собирает все совпадения в массив $matches.
  3. Разделение на буквы и цифры:
    • Для каждого совпадения ($match) используем preg_match с шаблоном /([А-ЯA-Z]+)(\d*)/u:
      • [А-ЯA-Z]+ — одна или более букв (кириллица или латиница).
      • \d* — ноль или более цифр (чтобы учесть случаи без цифр).
    • Результат сохраняется в $parts: $parts[1] — буквы, $parts[2] — цифра (или пустая строка).
  4. Формирование результата:
    • Создаем массив $results с полной строкой, буквами и цифрой.
  5. Вывод:
    • Выводим результаты в читаемом виде.

Шаг 5: Пример вывода

Для входной строки "МК1 ПК2 ПС ПКВ3 ПТ4 ППР К ПП МK4 ПT" результат будет примерно таким:

text
Результаты обработки: Полное совпадение: МК1, Буквы: МК, Цифра: 1 Полное совпадение: ПК2, Буквы: ПК, Цифра: 2 Полное совпадение: ПС, Буквы: ПС, Цифра: Полное совпадение: ПКВ3, Буквы: ПКВ, Цифра: 3 Полное совпадение: ПТ4, Буквы: ПТ, Цифра: 4 Полное совпадение: ППР, Буквы: ППР, Цифра: Полное совпадение: К, Буквы: К, Цифра: Полное совпадение: ПП, Буквы: ПП, Цифра: Полное совпадение: МK4, Буквы: МK, Цифра: 4 Полное совпадение: ПT, Буквы: ПT, Цифра:

Шаг 6: Дополнительные замечания

  • Кириллица и латиница: Регулярное выражение [ММM] и т.д. позволяет обрабатывать смешанные варианты (например, МK или ПT).
  • Ограничение цифр: В примере я ограничил цифры диапазоном [1-4]. Если нужны любые цифры, замените [1-4]? на \d?.
  • Обработка ошибок: Если строка содержит некорректные шаблоны (например, "АБВ"), они будут проигнорированы, так как не соответствуют заданным шаблонам.
  • Модификатор /u: Обеспечивает корректную работу с кириллицей.

Шаг 7: Расширение (если нужно)

Если требуется поддержка других шаблонов или дополнительных цифр, можно модифицировать регулярное выражение. Например:

  • Для любых цифр: заменить [1-4]? на \d?.
  • Для новых шаблонов: добавить их в $pattern, разделяя через |.

Если есть дополнительные вопросы или нужно что-то уточнить, дайте знать!

1s
Повторить как в первом варианте создать регулярное выражение по нижем примерам И пропарсить отдельно цифры и буквы но только те что в скобочках На выходе получить пример из ТВ(33) массив 0=>ТВ() 1=>ТВ(33) 2=>33 Так же пример СШ40/50(7/15)_(7/5) получить массив 0=>СШ40/50 1=>7 2=>15 3=>7 4=>5 ТВ(343) ТВп(6)_C70(64) ТВпСВ(33) ТВп_2(18) С40(1) СШ40(21)_(2) СШ40/50(7/15)_(7/5) С40_2/С41(456) C50(56) C51(78) C50_2(43) C50_2/С41(2) C50_2/С30(8) СШ50(90)_(22) C60(5) C60_2(78) C70(3) C80(11) C81(10) KНн(2 ) КНл(45 ) КБн(6 ) КМн15МР( 7) КМн20МР( 2) КМн12МР(1131)

Я создам решение на PHP для обработки строк по заданным шаблонам, учитывая кириллицу, латиницу, цифры и скобки, как указано в примерах. Разберу задачу подробно, чтобы получить массивы с выделением букв, цифр и полных совпадений, как в примерах: ТВ(33)[0 => "ТВ", 1 => "ТВ(33)", 2 => "33"] и СШ40/50(7/15)_(7/5)[0 => "СШ40/50", 1 => "7", 2 => "15", 3 => "7", 4 => "5"].

Постановка задачи

  1. Шаблоны:
    • Строки состоят из букв (кириллица или латиница), цифр, символов /, _, и скобок ().
    • В скобках находятся одна или две цифры, разделенные / (например, (33) или (7/15)).
    • Примеры: ТВ(343), СШ40/50(7/15)_(7/5), КМн12МР(1131).
  2. Требования:
    • Извлечь совпадения, соответствующие шаблонам.
    • Для каждого совпадения выделить:
      • Буквы и цифры до скобок (например, ТВ, СШ40/50).
      • Полное совпадение (например, ТВ(33)).
      • Цифры в скобках (например, 33 или 7, 15).
    • Для строк с несколькими парами скобок (например, СШ40/50(7/15)_(7/5)) извлечь все цифры из скобок отдельно.
  3. Выходной формат:
    • Для ТВ(33): [0 => "ТВ", 1 => "ТВ(33)", 2 => "33"].
    • Для СШ40/50(7/15)_(7/5): [0 => "СШ40/50", 1 => "7", 2 => "15", 3 => "7", 4 => "5"].

Решение

Шаг 1: Анализ шаблонов

На основе примеров определим структуру:

  • Базовая часть: Состоит из букв (кириллица: Т, В, С, Ш, К, Н, М, Р; латиница: T, V, C, K, N, M, R), цифр, символов / и _.
  • Скобки: После базовой части идут одна или две пары скобок с цифрами:
    • Одна пара: (число) (например, (33)).
    • Две пары: (число/число)_(число/число) (например, (7/15)_(7/5)).
  • Примеры шаблонов:
    • ТВ(343): Буквы ТВ, полное совпадение ТВ(343), цифра 343.
    • СШ40/50(7/15)_(7/5): Буквы СШ40/50, цифры 7, 15, 7, 5.

Регулярное выражение должно:

  • Захватывать базовую часть (буквы, цифры, /, _).
  • Захватывать цифры в скобках отдельно.
  • Учитывать кириллицу и латиницу.

Шаг 2: Регулярное выражение

Создадим регулярное выражение для обработки всех случаев:

text
/([А-ЯA-Z\d\/_]+)(?:\((\d+)(?:\/(\d+))?\)(?:_\((\d+)(?:\/(\d+))?\))?)/u

Объяснение:

  • ([А-ЯA-Z\d\/_]+): Захватывает базовую часть (группа 1):
    • [А-ЯA-Z]: Любые буквы (кириллица или латиница).
    • \d: Цифры.
    • \/: Символ / (экранированный).
    • _: Символ _.
    • +: Один или более символов.
  • (?:\((\d+)(?:\/(\d+))?\)?): Захватывает первую пару скобок (группы 2 и 3):
    • \(: Открывающая скобка.
    • (\d+): Первое число (группа 2).
    • (?:\/(\d+))?: Необязательное второе число после / (группа 3).
    • \): Закрывающая скобка.
  • (?:_\((\d+)(?:\/(\d+))?\))?: Захватывает вторую пару скобок, если есть (группы 4 и 5):
    • _: Символ _.
    • \(: Открывающая скобка.
    • (\d+): Первое число (группа 4).
    • (?:\/(\d+))?: Необязательное второе число (группа 5).
    • \): Закрывающая скобка.
    • ?: Вся вторая пара скобок необязательна.
  • /u: Модификатор для поддержки Unicode (кириллица).

Шаг 3: Код на PHP

Код будет обрабатывать входную строку, находить все совпадения и формировать массивы в требуемом формате.

parse_patterns.php
php

Шаг 4: Объяснение кода

  1. Входная строка:
    • Содержит все примеры, разделенные пробелами.
  2. Регулярное выражение:
    • Захватывает базовую часть (группа 1) и числа в скобках (группы 2–5).
    • PREG_SET_ORDER в preg_match_all возвращает массив, где каждое совпадение содержит все группы.
  3. Обработка совпадений:
    • Для каждого совпадения:
      • $match[1]: Базовая часть (например, ТВ, СШ40/50).
      • $match[0]: Полное совпадение (например, ТВ(33), СШ40/50(7/15)_(7/5)).
      • $match[2] и $match[3]: Числа из первой пары скобок.
      • $match[4] и $match[5]: Числа из второй пары скобок (если есть).
    • Формируем массив: [базовая часть, полное совпадение, число1, число2, ...].
  4. Вывод:
    • Выводим результаты в читаемом виде, разделяя элементы запятыми.

Шаг 5: Пример вывода

Для входной строки результат будет выглядеть примерно так (для первых нескольких совпадений):

text
Совпадение 0: ТВ, ТВ(343), 343 Совпадение 1: ТВп_C70, ТВп(6)_C70(64), 6, 64 Совпадение 2: ТВпСВ, ТВпСВ(33), 33 Совпадение 3: ТВп_2, ТВп_2(18), 18 Совпадение 4: С40, С40(1), 1 Совпадение 5: СШ40, СШ40(21)_(2), 21, 2 Совпадение 6: СШ40/50, СШ40/50(7/15)_(7/5), 7, 15, 7, 5 ...

Шаг 6: Проверка на примерах

  • ТВ(33):
    • Базовая часть: ТВ.
    • Полное совпадение: ТВ(33).
    • Цифры: 33.
    • Результат: [0 => "ТВ", 1 => "ТВ(33)", 2 => "33"].
  • СШ40/50(7/15)_(7/5):
    • Базовая часть: СШ40/50.
    • Полное совпадение: СШ40/50(7/15)_(7/5).
    • Цифры: 7, 15, 7, 5.
    • Результат: [0 => "СШ40/50", 1 => "7", 2 => "15", 3 => "7", 4 => "5"].

Шаг 7: Дополнительные замечания

  • Кириллица и латиница: Регулярное выражение [А-ЯA-Z] обрабатывает обе раскладки.
  • Гибкость: Шаблон поддерживает одну или две пары скобок, а также случаи без / в скобках.
  • Ошибки: Если строка не соответствует шаблону, она будет проигнорирована.
  • Расширения: Если нужно добавить новые шаблоны или изменить формат цифр, можно модифицировать регулярное выражение (например, добавить поддержку букв в скобках).

Если нужно что-то уточнить или доработать, напишите!

3,1s
Как Grok может помочь?