Frage

Wir über durch diese zu arbeiten, aber dachte, jemand hatte haben es bereits in Angriff zu nehmen, so ...

Ich bin auf der Suche nach einer eleganten (und isapi kompatibel umschreiben) regulären Ausdrucks für drei bekannte Parameter / Wert-Paare in einem Abfragezeichenfolgeflag zu suchen, unabhängig von der Reihenfolge, und auch alle anderen Parameter zu extrahieren, während diese drei Strippen aus.

abc = 123 def = 456 und ghi = 789 sind alle bekannten festen Strings. Sie können in der Abfragezeichenfolgeflag in beliebiger Reihenfolge erscheinen, und kann oder auch nicht die einzigen Parameter sein kann oder nicht benachbart sein kann. Es sollte klug sein und paßt nicht ein aabc = 123 oder abc = 123 4 (so dass jeder gesuchten Parameter durchgeführt werden, eingeklammert sollte &,?, # Oder Ende der Zeichenkette) . Der Ausgang ich will, ist eine neue Abfrage-String mit den restlichen params abgezogen.

Ich werde wahrscheinlich einen Stich an der Logik am Morgen nehmen, so Bonuspunkte, wenn Sie können es lösen, bevor ich versuche, dann.

Keine korrekte Lösung

Andere Tipps

Ich denke, reguläre Ausdrücke sollten nicht für Probleme dieser Art verwendet werden. tokenize nur die Zeichenfolge, und vergleichen Namen jeden Parameters zu dem, was Sie suchen.

s/(\?|\#|\&)(abc=123|def=456|ghi=789)(\&|\#|$)//g

Dies ist ungefähr und ungetestet, sondern stellt eine Arbeits (glaube ich) Konzept. Grundsätzlich sucht Start Grenze, Zeichenkette, dann Grenze enden, die jeweils mit null ersetzt, global und unter Verwendung | alternative Optionen zu geben, für jeden.

Hier ist, was ich habe kommen mit:

RewriteRule ^/oldpage.htm\?(.\*)(?<=\?|&)(?:abc=123&|def=456&|ghi=789&)(.\*)(?<=&)(?:abc=123&|def=456&|ghi=789&)(.\*)(?<=&)(?:(?:abc=123|def=456|ghi=789)(?:&|#|$))(.\*) /newpage.htm?$1$2$3  [I,RP,L]

die ich Werke denken. Vorgriff / Lookbehind-Qualifikation (? <= und (? = scheint der Schlüssel zu mir erlaubt, für den umfassenden & oder? ohne „raubend es“ zu versauen das nächsten Spiel.

zu sehen zu sein

Eine gotcha ist, dass, wenn die alte Seite url nur die drei params hat, habe ich noch mit einem nachgestellten enden? ohne Parameter auf der umgeleiteten URL „/newpage.htm?“. Ich plane zur Zeit zu vermeiden, dass durch eine RewriteCond mit nur mit 4+ params vor dieser Brände auf Urls zu suchen, und haben ein einfacheres Spiel regex für die, die genau mit three..so der volle Regelsatz kommt auf:

RewriteCond URL ^/oldpage.htm\?([^#]\*=[^#]\*&){3,}[^#]\*=[^#]\*.\*

RewriteRule ^/oldpage.htm\?(.\*)(?<=\?|&)(?:abc=123&|def=456&|ghi=789&)(.\*)(?<=&)(?:abc=123&|def=456&|ghi=789&)(.\*)(?<=&)(?:(?:abc=123|def=456|ghi=789)(?:&|#|$))(.\*) /newpage.htm?$1$2$3  [I,RP,L]

RewriteRule ^/oldpage.htm\?(?:abc=123|def=456|ghi=789)&(?:abc=123|def=456|ghi=789)&(?:abc=123|def=456|ghi=789)(.\*) /newpage.htm$1 [I,RP,L]

(die $ 1 am Ende ist für #additions auf die URL ... muss ich es wirklich?) Das andere Problem ist, nehme ich an eine URL /oldpage.htm?abc=123&abc=123&abc=123 dies auslösen würde , aber ich sehe keine einfache Möglichkeit, um das, und bin nicht allzu besorgt darüber ..

Kann jemand denken Sie an einen besseren Weg, dies zu nähern, oder sehen Sie alle anderen Fragen?

Es gibt Abfragezeichen Decoder. Es gibt viele verbundenen Themen, vor allem auf dieser Seite.

Einige von ihnen.

Erste

Zweite

Und javadocs link für apache-Decoder.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top