我正在嘗試編寫一個正則表達式來解析媒體類型字符串的供應商,版本和格式組件,其中版本將在最終破折號之後。例如:非貪心小組Ruby正則表達式匹配
- 上
"vnd.mycompany-foo-bar-v1+json"
匹配應該產生['mycompany-foo-bar', 'v1', 'json']
- 上
"vnd.mycompany-v1+json"
匹配應該產生['mycompany', 'v1', 'json']
- 上
"vnd.mycompany+json"
匹配應該產生['mycompany', nil, 'json']
- 上
"vnd.mycompany-foo-bar-v1"
匹配應該產生['mycompany-foo-bar', 'v1', nil]
到目前爲止離我最近的我小號
/\Avnd\.([a-z0-9*.\-_!#\$&\^]+?)(?:-([a-z0-9*\-.]+))?(?:\+([a-z0-9*\-.+]+))?\z/
但匹配反對 「vnd.mycompany-foo_bar這樣-V1 + JSON」 給我['mycompany', 'foo-bar-v1', 'json']
。
這是可能無限數量的破折號扔我循環。
OP正確使用了'\ A'和'\ z'。爲什麼要將它們改爲常用的'^'和'$'? – sawa
爲什麼在使用'+'作爲版本時使用'*'作爲格式組件? – sawa
@sawa'^'和'$'沒有錯誤。只要不設置多行,它們就匹配字符串的開頭和結尾。至於量詞,這是因爲,正如我解釋的那樣,供應商可以有一個'-',但它不能有'+'。因此,'vnd.cpy-'應該考慮'company =「cpy-」',而'vnd.cpy +'應該被視爲空格式。 – Mariano