2017-05-09 3 views
0

Arbeit fand ich diese Regex auf regexlib:Regex für URL nicht

\b([\d\w\.\/\+\-\?\:]*)((ht|f)tp(s|)\:\/\/|[\d\d\d|\d\d]\.[\d\d\d|\d\d]\.|www\.|\.tv|\.ac|\.com|\.edu|\.gov|\.int|\.mil|\.net|\.org|\.biz|\.info|\.name|\.pro|\.museum|\.co)([\d\w\.\/\%\+\-\=\&\?\:\\\"\'\,\|\~\;]*)\b 

Es funktioniert gut, es sei denn, meine URL mit Symbolen endet.

Test-string:

http://localhost/MySite/Default.aspx?dl=TzV+1tS9W13zQX0NBLpQWS3gzszG5g59814C2PCXb0RqECKPsJ0n087YRaQ4w9iFIM86q8jBfQL3KoOkh79yUjSAV1XtJC4oL9sxeTmegFfD+TvbT/AZgCHpBgk1qOILqrILnpVKe/JWq0QISestnbOT/bq1KrTmHIlZVYuYC0jX2aCLYw2pOYV04Di43mMZNFwhL97m30XEBF2zFXTqyR8JYN0mOEdB4bpdN7SmTvwOzk6GE1paaKnGA0SEJA6+cm9azUrpl5/HIBmMt9I0CgRr+AlWZRlsZU1c+6ZUrX0rWWjUeeN5JHlNcHk0TGuMiuyEt5hmfAPXpxATe0fDXw== 

Die Regex wird die URL bis zu den letzten 2 Gleichheitszeichen fangen, die erhalten werden nicht berücksichtigt.

Ich habe ein paar andere Regex-Muster vergeblich versucht. Und ich versuche jetzt seit ungefähr einer Stunde mit diesem einen Affen zu spielen, ohne Glück. Ich kenne Regex einfach nicht gut genug!

Vorschläge?

Antwort

1

Nur ein [=]* am Ende hinzufügen, wie

\b([\d\w\.\/\+\-\?\:]*)((ht|f)tp(s|)\:\/\/|[\d\d\d|\d\d]\.[\d\d\d|\d\d]\.|www\.|\.tv|\.ac|\.com|\.edu|\.gov|\.int|\.mil|\.net|\.org|\.biz|\.info|\.name|\.pro|\.museum|\.co)([\d\w\.\/\%\+\-\=\&\?\:\\\"\'\,\|\~\;]*)\b[=]* 

Ich vermute, die URL enthält Basis 64 Daten, die in mehrere = enden könnten. Das Hinzufügen der [=]* sagt Regex, um 0 oder mehr gleiche Symbole zu erwarten.

+0

Wie kann das Muster so geändert werden, dass ein beliebiges Symbol (und nicht nur ein Gleichheitszeichen) am Ende der URL enthalten ist? – GoDogGo

+0

Ich denke, ich habe es basierend auf Ihrer Antwort @gaganshera. Gibt es einen effizienteren Weg als unten? '\ b ([\ d \ w \. \/\ + \ - \? \:] *) ((ht | f) tp (s |) \: \/\/| [\ d \ d \ d | \ d \ d] \. [\ d \ d \ d | \ d \ d] \. | www \. | \ .tv | \ .ac | \ .com | \ .edu | \ .gov | \ .int | \ .mil | \ .net | \ .org | \ .biz | \ .info | \ .name | \ .pro | \ .museum | \ .co) ([\ d \ w \. \/\% \ + \ - \ = \ & \? \: \\\ " \ '\, \ | \ ~ \;] *) \ b ([=, @, +,!,%, &, *, -]) * ' – GoDogGo

+1

Sie sollten keine Kommas als Trennzeichen für Regex hinzufügen. Außerdem sollten Sie Zeichen wie * usw. flüchten. Gehen Sie so vor: '\ b ([\ d \ w \. \/\ + \ - \? \:] *) ((Ht | f) tp (s |) \ : \/\/| [\ d \ d \ d | \ d \ d] \. [\ d \ d \ d | \ d \ d] \. | www \. | \ .tv | \ .ac | \ .com | \ .edu | \ .gov | \ .de | \ .mil | \ .net | \ .org | \ .biz | \ .info | \ .name | \ .pro | \ .museum | \ .co) ([\ d \ w \. \/\% \ + \ - \ = \ & \? \: \\\ " \ '\, \ | \ ~ \;] *) \ b ([= @ +! % & \ *, -]) * ' – gaganshera