我想了解有關正則表達式的內容。
這裏是我要匹配:正則表達式:查詢字符串參數匹配
/parent/child
/parent/child?
/parent/child?firstparam=abc123
/parent/child?secondparam=def456
/parent/child?firstparam=abc123&secondparam=def456
/parent/child?secondparam=def456&firstparam=abc123
/parent/child?thirdparam=ghi789&secondparam=def456&firstparam=abc123
/parent/child?secondparam=def456&firstparam=abc123&thirdparam=ghi789
/parent/child?thirdparam=ghi789
/parent/child/
/parent/child/?
/parent/child/?firstparam=abc123
/parent/child/?secondparam=def456
/parent/child/?firstparam=abc123&secondparam=def456
/parent/child/?secondparam=def456&firstparam=abc123
/parent/child/?thirdparam=ghi789&secondparam=def456&firstparam=abc123
/parent/child/?secondparam=def456&firstparam=abc123&thirdparam=ghi789
/parent/child/?thirdparam=ghi789
我的表情應該 「待價而沽」 ABC123和def456。
而現在只是什麼我不打算匹配的例子(「問號」丟失):
/parent/child/firstparam=abc123&secondparam=def456
好吧,我建立了下面的表達式:
^(?:/parent/child){1}(?:^(?:/\?|\?)+(?:firstparam=([^&]*)|secondparam=([^&]*)|[^&]*)?)?
但是,沒有按沒有工作。
你能幫我理解我做錯了什麼嗎?
在此先感謝。
更新1
好吧,我做其他檢查。 我想用這樣的修復以前版本:
/parent/child(?:(?:\?|/\?)+(?:firstparam=([^&]*)|secondparam=([^&]*)|[^&]*)?)?$
讓我解釋一下我的想法:
必須與/父母/子女開始:
/parent/child
下面的一組是可選的
(?: ...)?
上一個可選組必須以?開頭?要麼 /?
(?:\?|/\?)+
可選參數(I搶值如果指定的參數是查詢字符串的一部分)線
$
任何建議的
(?:firstparam=([^&]*)|secondparam=([^&]*)|[^&]*)?
結束?
更新2
我的解決方案必須基於剛上正則表達式。 就比如,我以前寫了下面的一個:
/parent/child(?:[?&/]*(?:firstparam=([^&]*)|secondparam=([^&]*)|[^&]*))*$
這工作相當不錯。 但它下面的輸入也很相配:
/parent/child/firstparam=abc123&secondparam=def456
我怎麼能修改表達式以不以前的字符串相匹配?
這是你所有可能的輸入嗎?它總是有這樣的結構嗎? – FailedDev 2012-08-02 08:20:24
@FailedDev 是的。 – NicolaBaldi 2012-08-02 08:46:10
@NicolaBaldi看到我的答案。不要爲此使用正則表達式,導致類似你的任務可以(並且必須)通過簡單的字符串處理函數來解決;)正則表達式是昂貴的工具,真的! – gaussblurinc 2012-08-02 10:32:02