我在一個字串中得到三個引數。每個引數都寫成以下形式:引號、名稱、引號、等號、引號、文本、引號。引數分隔符是一個空格。示例 1:
"param1"="Peter" "param2"="Harald" "param3"="Marie"
使用 java.util.regex.Matcher 我可以通過以下正則運算式找到任何名稱和文本:
"([^"]*)"\s*=\s*"([^"]*)"
但是,現在文本中可能有一個引號。這被反斜杠掩蓋。示例 2:
"param1"="Peter" "param2"="Har\"ald" "param3"="Marie"
我已經構建了以下正則運算式:
"([^"]*)"\s*=\s*("([^"]*(\\")*[^"]*)*[^\\]")
這適用于示例 2,但不是通用解決方案。
如果反斜杠位于引數值的末尾,則解決方案不再有效。示例 3:
"param1"="Peter" "param2"="Harald\" "param3"="Marie"
如果反斜杠位于值的末尾,則匹配器將 "Harald\" " 解釋為引數 2 的值,而不是 "Harald\"。
你有這個問題的通用解決方案嗎?提前感謝您的意見。
親切的問候多米尼克
uj5u.com熱心網友回復:
你可以在 Java 中使用這個正則運算式:
\"([^\"]*)\"\h*=\h*(\"[^\\\"]*(?:\\(?=\"(?:\h|$))|(?:\\.[^\\\"]*))*\")
正則運算式演示
正則運算式演示:
\"([^\"]*)\": 匹配帶引號的字串一個引數名\h*=\h*:匹配=用可選空格包圍(: 開始捕獲組 #1\": 比賽開場"[^\\\"]*: 匹配 0 個或多個非引號、非反斜杠字符(?::\\: 匹配一個\(?=\"(?:\h|$)): 后面必須跟一個后面"有空格或行的|: 或者(?:\\.[^\\\"]*))*: 匹配一個轉義字符,后跟 0 個或多個非引號、非反斜杠字符
\": 比賽結束"): 結束捕獲組 #1
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/476796.html
