2017-12-22 15 views
1

Ich möchte unter Ergebnisse mit Hilfe von Regular Expression erreichen -RegulaererAusdruck funktioniert nicht wie erwartet C#

http://articles-test.mer.com --> should not match/accept or return false 

http://articles-test.mer.com/ --> should not match/accept or return false 

http://articles-test. mer.com/ --> should not match/accept or return false 

http://articles-test. mer.com/sites --> should not match/accept or return false 

http://articles-test.mer.com/sites --> should match/accept or return true 

http://foodfacts.merc.com/green-tea.html --> should match/accept or return true 

http://articles-test.merc.com/sites/abc.aspx --> should match/accept or return true 

Conclusion- Kurz notiert, wenn die URL nur domain, sollte es not match/accept

I habe mit dem untenstehenden expression versucht aber es funktioniert nicht wie erwartet -

^http (s): // (. [\ W-] +) + [\ w-] + (/ [\ w- ./?])?$

Bitte legen nahe, und Dank in voraus!

+0

Sie müssen den Punkt entkommen. '\ W -] + \ '. – HimBromBeere

+0

@HimBromBeere Könnten Sie bitte hervorheben, welchen Teil des Ausdrucks Sie hinzufügen oder ausschließen möchten? – PPB

+2

Sie haben eine Menge darüber gesagt, was Sie * nicht * wollen wollen, aber nicht klar angegeben haben, was Sie * tun * wollen. Sind Sie sicher, dass Regex das richtige Werkzeug für den Job ist? Es sieht so aus, als ob du versuchst, mit irgendeiner Form oder URIs zu arbeiten - könntest du 'Uri' nicht' TryCreate' und seine verschiedenen Eigenschaften überprüfen? –

Antwort

1

Sie können diese regex verwenden:

^http(s)?://[^/\s]+/.+$ 
+2

Dies entspricht auch "http: // meine seltsame Zeichenfolge, die Leerzeichen/kakakakaka enthält", was definitiv keine gültige URL ist. – HimBromBeere

+0

@HimBromBeere - aber es ist nicht die Voraussetzung, denke ich. –

+0

@karthikselvaraj Aktualisiert! – PPB

3

Sie müssen nur den Punkt zu entkommen, wie es in der Regel bedeutet jedes einzelne Zeichen. Gleiches gilt auch für den Schrägstrich. So Ihre regex wird dies:

^http(?:s)?:\/\/(?:[\w-]+\.?)+\/[\w-\.]+(\/[\w-])?$ 

so die \/\/ buchstäblich // entspricht, während \. den Punkt übereinstimmt.

Ich habe auch einige nicht einfangende Gruppe (?:) hinzugefügt. Wenn Sie wollen, um die einzelnen Teile zu erhalten, nur diese zwei Zeichen auslassen.

Schauen Sie sich auf regex101

EDIT: Ive hatte ein \. zum Teil hinter den /, so dass Sie auch Dateien anstelle von Verzeichnissen in Ihrer URL übereinstimmen können.

EDIT2: Sie sollten definitiv prüfen, ob eine gegebene Zeichenfolge eine gültige URL ist, die Uri.TryCreate verwendet, wie in this post gezeigt, anstatt das Rad mit einem schwer zu verstehenden regulären Ausdruck neu zu erfinden.

Uri uriResult; 
bool result = Uri.TryCreate(myString, UriKind.Absolute, out uriResult) 
    && uriResult.Scheme == Uri.UriSchemeHttp; 
+0

Danke ... Arbeitete wie ein Charme .. – PPB

+0

Aber wenn ich diese URL eingeben http://foodfacts.mercola.com/green-tea.html 'es passt nicht, infact das sollte gültig sein – PPB

+0

Aktualisiert meine Anforderung ... – PPB

Verwandte Themen