あなたはパラメータの固定数を持っていない場合、それはあなたがグループの動的な数の正規表現を作成することはできませんので、あなたは、単一の正規表現を書くことができないことを意味します。ただし、マッチを繰り返すことができます。 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
}
UPDATEのようになります:1つのパラメータが欠落していることができたとき、私は単一の正規表現で行うことができます最高のケースである(つまり、3つのまたは4のパラメータをそこにいる)
あなたはパラメータが不足しているかを検出できるよう
{=tokenstring\?(?:(param\d+)=(.+?)(?:&|(?:}$)))(?:(param\d+)=(.+?)(?:&|(?:}$)))(?:(param\d+)=(.+?)(?:&|(?:}$)))|(?:(param\d+)=(.+?)(?:&|(?:}$)))
あなたは試合グループにパラメータをマッチしますよ。また、パラメータの順序は関係ありません。
regexにif-then-else (?(?=condition)then|else)
構造もありますが、1〜4個のパラメータを持つことができれば、3つのレベルのネストされた正規表現を作成する必要があります。 4つのパラメータ、3つのパラメータの存在の中のもう1つなど、それぞれが狂った数の捕捉グループで繰り返されます。
あなたが正規表現でこれを行うことができるかもしれないが、あなたは最初に '&'ことで、その後、 '='で文字列を分割することができれば、あなたは大いに問題を単純化することができます。現在どのツール/言語を使用していますか? –
あなたは 'param3'の値が欲しいのですか、それともparam3が存在しないかを確認したいのですか? – abc123
1.私は、この正規表現ツール使用しています:param3は上記参照文字列に存在するかどうか確認したいhttp://regexr.com/ 2.を。 3. TIm:このRegExをデータベースクエリに使用する必要があるため、文字列の分割はここでは機能しません。 –