簡體   English   中英

使用正則表達式以隨機順序查找可選組

[英]Finding optional groups with random order using regex

我正在嘗試使用Regex獲取以下內容。

這是示例輸入:

-emto=USER@HOST.COM -emfrom=USER@HOST.COM -emsubject="MYSUBJECT" 

其他輸入:

-emto=USER@HOST.COM -emfrom=USER@HOST.COM -emcc=ME@HOST.COM -embcc=YOU@HOST.COM -emsubject="MYSUBJECT" 

我想實現的是使用-em之后的文本來命名組。 因此,我希望有例如EMAIL_TO,EMAIL_FROM,EMAIL_CC等組。...請注意,我可以使用代碼合並組名並捕獲,這沒有問題。

問題是我不知道如何捕獲具有“隨機”位置的可選組。 例如,抄送和密件抄送並不總是出現,但有時會出現,然后我需要捕獲它們。

有人可以幫我解決這個問題嗎?

到目前為止,我所擁有的: (?:-em(?<EMAIL_>to|cc|bcc|from|subject)=(.*))

只需執行以下操作:

-em([^\s=]+)=([^\s]+)

如果您需要支持值的引用,以便它們可以包含空格:

-em([^\s=]+)=("[^"]*"|[^\s]+)

並遍歷命令行arg字符串中的所有匹配項。 對於每個匹配項,請查看“關鍵點”(第一個捕獲組),然后看是否識別出該關鍵點。 如果不是,則顯示錯誤消息並退出。 如果是,請相應地設置選項(第二個捕獲組是“值”)。

POSTSCRIPT:這使我想起了一種為計算機語言編寫語法時經常出現的情況。

有可能(也許甚至很自然)編寫僅適用於語法完美的程序的語法。 但是對於良好的錯誤報告,最好編寫一個語法,該語法接受語法正確的程序的超集 獲得解析樹后,您可以對其進行遍歷,查找錯誤並使用特定於應用程序的代碼報告錯誤。

在這種情況下,您可以編寫一個僅與您實際接受的選項匹配的正則表達式。 但是,如果有人輸錯了一個選項,則正則表達式將完全無法匹配。 無論命令行args是否為-emsubjcet=something或它們是否像@@#$*(#&U*REJDFFKDSJ**&#(*$&##

POST-POSTSCRIPT:請注意非常常見的正則表達式模式,它匹配“定界符+任意數量的不是定界符的字符”。 在我上面的正則表達式中,您可以在此處看到以下內容: ([^\\s=]+)= -1個或多個非空格OR =的字符,后跟=。 這使我們可以輕松地吃掉鑰匙中的所有東西,但不要走得太遠並與定界=匹配。 您可以在這里再次看到它: "[^"]*" -一個引號,后跟0個或多個不是引號的字符,后跟一個結束引號。

暫無
暫無

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

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