Соответствие регулярному выражению на основе двух строк с использованием AND
Я хочу извлечь команды из строки. Команды, которые мне нужны, содержат конкретные идентификаторы 124 и 123, а также конкретные флаги od и xy. Поэтому я хочу извлечь все те команды, которые contained my ids [123|124]
а также my flags[od|xy]
только.
Строка: Z124xy54;Z123od33;Z123od343;Z251od541;Z251ab541;
Regex: Z[^;]*?(od|xy)[^;]*?;
Требуемый выход: [Z124xy54; Z123od33; Z123od343;]
Но текущий выход: [Z123xy54; Z123od33; Z123od343; Z251od541;]
Я знаю, почему так происходит, но не знаю, как это решить. Любой может помочь, пожалуйста
Другой образец:
Z124xy54;Z123od33;Z123od343;Z251od541;Z251ab541;Z123od343;
Z124xy54;Z123od33;Z123od343;Z251od541;Z251ab541;Z123od343X
1 ответ
Решение
Используйте:
(Z(?:123|124)(?:xy|od).*?(:?;|$))
- Начните с Z => (Z)
- Совпадение 123 или 124 без группы захвата => (?:123|124)
- Совпадение zy или od без захвата группы => (?: Xy|od)
- Совпадение с чем угодно, кроме перевода строки до первого; или конец строки найден без записи группы => (:?;|$)
Рабочая демонстрация: https://regex101.com/r/AugDZT/2