我正在做一個需要決議字串以獲取子字串的輔助專案
我有一個 REST API,在有效負載中包含一個字串引數。此 String 值的模式可以在任何登記模式中有所不同:
- [姓名]
- [名稱 1]、[名稱 2]
- [名稱 1] 和 [名稱 2]
- [名稱 1]、[名稱 2] 和 [名稱 3]
- [名稱 1]、[名稱 2] 和 [名稱 3]、[角色]
我嘗試過的選項:
在請求負載中包含另一個引數,描述字串值的格式。例如:如果將模式#4 的字串值作為輸入傳遞,這是我期望的有效負載:
{
“值”:“名稱 1、名稱 2 和名稱 3”、
“格式”:4
}
在這里,確定格式并相應地設定格式值是客戶端的負擔,這絕對不是一個好方法
- 以某種方式確定格式(例如:計算逗號和 AND 關鍵字的數量)并相應地使用專用于該格式的 Reg-ex 例如:如果字串包含至少一個逗號,則出現 AND 關鍵字和后面的逗號AND 關鍵字,它可以是模式#5(在上面的串列中描述)。所以使用 Reg-ex 模式:
([a-zA-Z] ( [a-zA-Z] ) ),([a-zA-Z] ( [a-zA-Z] ) ),[a-zA-Z]
這種方法確實有效,但仍然過于死板而不實用。例如:考慮 4 個名稱(而不是 3 個)作為值的一部分,上述模式將不起作用
是否有更通用的 reg-ex 模式可以滿足上述每個模式?
uj5u.com熱心網友回復:
這是一個涵蓋所有 5 種輸入型別的通用正則運算式模式:
^\[.*?\](?:(?:,|\s and\s )\s*\[.*?\](?:\s and\s \[.*?\])*)*$
演示
正則運算式的解釋:
^ start of string
\[.*?\] match [Name]
(?:
(?:,|\s and\s ) match either comma or "and" separator
\s* optional whitespace
\[.*?\] another [Name 2]
(?:
\s and\s "and" separator
\[.*?\] more [Name] terms
)* zero or more
)* zero or more
$ end of string
uj5u.com熱心網友回復:
您可以撰寫重復匹配所有方括號之間的模式:
^\[[^\]\[]*](?:(?:,| and) \[[^\]\[]*])*$
在部分情況下,模式匹配:
^字串的開始\[[^\]\[]*]匹配自[....](?:非捕獲組(?:,| and)匹配逗號后跟空格或and后跟空格\[[^\]\[]*]匹配自[....]
)*關閉非捕獲組并可選擇重復$字串結束
正則運算式演示
在帶有雙重轉義反斜杠的 Java 中:
String regex = "^\\[[^\\]\\[]*](?:(?:,| and) \\[[^\\]\\[]*])*$"
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/436488.html
上一篇:YAML:編碼與語意差異
