Регулярное выражение ограничивает совпадение с найденной строкой

Мне нужно сопоставить пробел, но ограничить совпавшее с некоторым условием ..

Источник :
Код AS-277 Красный / Желтый
Код AS 278 Красный:
Код AS 279;
Код AS-280 красный;
Код AS 279 /

ОБНОВИТЬ :
Необходимый результат:
1. сопоставить все слова [\ w] и несколько специальных символов [_- + *] для кода
2. Стоп-символ - это [/;)] и ЦВЕТ КОНСТАНА [СИНИЙ | ЖЕЛТЫЙ | И Т.Д.]
3. без учета регистра

AS-277
AS 278
AS 279
AS-280

Я пишу на regex101.com
https://regex101.com/r/S6mvZF/2

2

Решение

Кажется, вы можете использовать

'~Code\s+([\w+*]+(?:[-\s][\w+*]+)*?\b)\s?(?:red|blue|green|yellow|[);/])~i'

Увидеть regex demo

подробности

  • Code — подстрока
  • \s+ — 1 или более пробелов
  • [\w+*]+ — 1 или более букв, цифр, _, * или же +
  • (?:[-\s][\w+*]+)*? — ноль или более (но как можно меньше) последовательностей:
    • [-\s] — а - или пробел
    • [\w+*]+ — 1 или более букв, цифр, _, * или же +
  • \b — граница слова (т. е. должен быть не-слово char (не буква, не цифра и не_)
  • \s? — 1 или 0 пробелов
  • (?:red|blue|green|yellow|[);/]) — одна из альтернатив: red, blue, green, yellow (добавить больше после |), или же [);/] — а ), ; или же /,

Возьмите значение группы 1 после матча.

1

Другие решения

Вы могли бы сделать:

$string = preg_replace('/^.*Code (AS[- ]\d+).*$/m', '$1', $string);

Демо-версия: https://regex101.com/r/S6mvZF/4

или же

preg_match_all('/Code (AS[- ]\d+)/, $string, $matches);

а потом $matches[1] будет иметь все ваши спички.

Оба регулярных выражения ищут Code AS, затем дефис или пробел, а затем хотя бы одно число (если десятичные знаки ограничены, можно применить диапазон {1,3}). Первое регулярное выражение идет строка за строкой. Второй только захватывает каждый матч.

Демо-версия: https://regex101.com/r/S6mvZF/5

1

Получив нужный результат, попробуйте это:

AS[- ][0-9]{3}
0

Я думаю, что это должно сработать:

Code (AS[ -]\d{3})

Это

  • код слова
  • КАК следует пробел или Hypen
  • 3 номера

Вот демо: https://regex101.com/r/S6mvZF/3

Удачи!

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector