簡體   English   中英

帶有條件模式的 pcre_regex,“或”和“與”條件

[英]pcre_regex with conditional patterns, "or" and "and" conditions

我正在使用pcre-regex-engine來匹配我的文件/行中的模式。 我試圖找到匹配的行是:

line-001 key_one:10.20.30.40 any data goes here
line-002 key_two:11.22.33.44 any data goes here
line-003 key_off:12.32.42.52 any data goes here
line-004 key_ten:34.45.67.89 any data goes here

現在,我想匹配以key_one:key_two:key_ten:開頭的 ip 模式。 我需要我的模式是有條件的,“匹配以key_one:或, key_two:key_ten:開頭的任何 ip 模式。

預期模式= key_one | key_two| key_ten & (\\d+.\\d+.\\d+.\\d+) key_one | key_two| key_ten & (\\d+.\\d+.\\d+.\\d+)

但是, or(|) 條件適用於 pcre,但不適用於 and(&) 條件。 有人可以幫我使用 and (&) 條件嗎? 感謝你。

您的正則表達式幾乎是正確的:除非使用/x修飾符,否則您認為模式中的空格沒有意義(在 PCRE 中,字符類之外),並且值之間有一個冒號。 此外,必須對點進行轉義以匹配文字點。

您可以使用

(key_(?:one|two|ten)):(\d{1,3}(?:\.\d{1,3}){3})

這是一種契約形式

(key_one|key_two|key_ten):(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})

查看正則表達式演示

如果您需要獲取 IP 作為匹配值,請使用\\K運算符丟棄與該運算符匹配的所有文本並僅返回稍后匹配的內容:

key_(?:one|two|ten):\K\d{1,3}(?:\.\d{1,3}){3}

請參閱此正則表達式演示

請注意,這是寫在這樣一種方式替代最佳實踐,他們沒有可以匹配在同一位置(以提高性能),這就是為什么它是不是一個好主意,重復同樣的key_內子(...|...)

+量詞匹配 1 次或多次出現,並且在 IP 地址中只能有一到三位數,這就是限制量詞{1,3}似乎更可靠的原因。

此外,為了避免不必要的捕獲,只需將捕獲( (...) ) 組轉換為非捕獲組 ( (?:...) )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM