如果您沒有固定數量的參數,這意味着您無法編寫單個正則表達式,因爲您無法使用動態數量的組創建正則表達式。但是,您可以遍歷匹配。例如,在PHP它看起來像這樣
#Check if token is right
if (preg_match('/\A\{=tokenstring\?param.+\}\Z/s', $subject)) {
# Successful match. Now iterate over tokens and their params
preg_match_all('/(param\d+)=(.+?)(?:&|(?:\}$))/s', $subject, $result, PREG_SET_ORDER);
for ($matchi = 0; $matchi < count($result); $matchi++) {
$param = $result[$matchi][0];
$param_value = $result[$matchi][1];
}
} else {
# Match attempt failed
}
更新:我可以用一個正則表達式能做的就是當一個參數可能缺少的情況下(即是有3個或4個參數)
{=tokenstring\?(?:(param\d+)=(.+?)(?:&|(?:}$)))(?:(param\d+)=(.+?)(?:&|(?:}$)))(?:(param\d+)=(.+?)(?:&|(?:}$)))|(?:(param\d+)=(.+?)(?:&|(?:}$)))
您會在匹配組中獲得匹配的參數,以便您可以檢測哪些參數丟失。參數的順序也無關緊要。
在正則表達式中還有一個if-then-else (?(?=condition)then|else)
結構,但是如果你可以有1到4個參數,這意味着你必須編寫一個嵌套的三個級別的正則表達式,第一個檢查是否存在4個參數,另外一個參數存在3個參數等等,每個參數都重複捕捉一組瘋狂的數字。
你可能可以用正則表達式來完成這個工作,但是如果你可以先用'&',然後再用'='來分割字符串,那麼你可以大大簡化這個問題。你目前使用什麼工具/語言? –
你是說你想要'param3'的值,或者你想確定param3是否存在,如果不匹配? – abc123
1.我正在使用這個正則表達式工具:http://regexr.com/ 2.想要檢查param3是否存在於上面的引用字符串中。 3. TIm:分割字符串可能無法在這裏工作,因爲我需要使用此RegEx進行數據庫查詢。 –