2016-11-28 40 views
-2

我想從字符串中提取命令。我需要的命令包含特定的ID 124和123以及特定的標誌od和xy。所以我想提取所有那些只有contained my ids [123|124]my flags[od|xy]的命令。正則表達式匹配基於兩個字符串使用AND

字符串: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 
+0

你爲什麼不需要'Z251od541;'?它匹配你的正則表達式。 –

+0

我的想法確切地 – Fallenhero

+0

和標題並沒有真正地告訴任何關於問題 – anubhava

回答

1

用途:

(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

+0

你能解釋一下你的答案嗎? –

+0

@WasimA。添加解釋 –

+0

你是什麼意思,沒有捕獲組? –