使用 AND 基于两个字符串进行正则表达式匹配

Regex Match based on two strings using AND

我想从字符串中提取命令。我需要的命令包含特定的 ID 124 和 123 以及特定的标志 od 和 xy。所以我想提取所有那些仅 contained my ids [123|124] my flags[od|xy] 的命令。

字符串:Z124xy54;Z123od33;Z123od343;Z251od541;Z251ab541;
正则表达式:Z[^;]*?(od|xy)[^;]*?;
所需输出:[Z124xy54; Z123od33; Z123od343;]
但当前输出:[Z123xy54; Z123od33; Z123od343; Z251od541;]

我知道为什么会这样,但不知道如何解决。任何人都可以提供帮助

另一个示例:

Z124xy54;Z123od33;Z123od343;Z251od541;Z251ab541;Z123od343;
Z124xy54;Z123od33;Z123od343;Z251od541;Z251ab541;Z123od343X

使用:

(Z(?:123|124)(?:xy|od).*?(:?;|$))
  1. 从 Z 开始 => (Z)
  2. 匹配 123 或 124 不捕获组 => (?:123|124)
  3. 不捕获组匹配 zy 或 od => (?:xy|od)
  4. 匹配除换行符之外的任何内容,直到第一个;或在没有捕获组的情况下找到字符串结尾 => (:?;|$)

工作演示:https://regex101.com/r/AugDZT/2