Kennt jemand einen regulären Ausdruck, mit dem ich URLs in einer Zeichenfolge finden könnte? Ich habe bei Google viele reguläre Ausdrücke gefunden, um festzustellen, ob eine ganze Zeichenfolge eine URL ist, aber ich muss in der Lage sein, eine ganze Zeichenfolge nach URLs zu durchsuchen. Zum Beispiel möchte ich in der Lage sein, www.google.com
und http://yahoo.com
in der folgenden Zeichenfolge zu finden:
Hello www.google.com World http://yahoo.com
Ich suche nicht nach bestimmten URLs in der Zeichenfolge. Ich suche nach ALLEN URLs in der Zeichenfolge, weshalb ich einen regulären Ausdruck benötige.
Antworten:
Dies ist die, die ich benutze
Funktioniert für mich, sollte auch für Sie arbeiten.
quelle
\w
stimmt möglicherweise nicht mit internationalen Symbolen überein (abhängig von der Regex-Engine), stattdessen wird der Bereich benötigt :a-zA-Z0-9\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF
.[\w_-]
sein[\w-]
? weil\w
passt_
schon. per mozilla docswww.yahoo.com
."""(http|ftp|https)://([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?""".r.findAllIn("www.google.com").toList
. LACKS AUCH ERLÄUTERUNG für die AntwortVermutlich ist kein Regex perfekt für diese Verwendung. Ich habe hier einen ziemlich soliden gefunden
Einige Unterschiede / Vorteile gegenüber den anderen hier veröffentlichten:
moo.com
ohnehttp
oder nicht erkennenwww
Beispiele finden Sie hier
quelle
g
Option ist nicht in allen Implementierungen mit regulären Ausdrücken gültig (z. B. in Rubys integrierte Implementierung).Ausgabe:
quelle
&
Parameter in der URL. zBhttp://test.com/method?param=wasd¶m2=wasd2
verpasst param2Keine der hier angebotenen Lösungen löste die Probleme / Anwendungsfälle, die ich hatte.
Was ich hier zur Verfügung gestellt habe, ist das Beste, was ich bisher gefunden / gemacht habe. Ich werde es aktualisieren, wenn ich neue Randfälle finde, die es nicht behandelt.
quelle
Ich denke, dieses Regex-Muster verarbeitet genau das, was Sie wollen
und dies ist ein Snippet-Beispiel zum Extrahieren von Urls:
quelle
Alle oben genannten Antworten stimmen nicht mit Unicode-Zeichen in der URL überein, z. B.: Http://google.com?query=đức+filan+đã+search
Für die Lösung sollte diese funktionieren:
quelle
Ich habe dies gefunden, das die meisten Beispiellinks abdeckt, einschließlich Unterverzeichnisteilen.
Regex ist:
quelle
Wenn Sie bei der Auswahl von Links streng sein müssen, würde ich mich für Folgendes entscheiden:
Weitere Informationen finden Sie hier:
Ein verbessertes liberales, genaues Regex-Muster für übereinstimmende URLs
quelle
Hier etwas optimierterer regulärer Ausdruck:
Hier ist ein Test mit Daten: https://regex101.com/r/sFzzpY/6
quelle
Wenn Sie das URL-Muster haben, sollten Sie in der Lage sein, es in Ihrer Zeichenfolge zu suchen. Stellen Sie einfach sicher, dass das Muster keinen Anfang und kein Ende der URL-Zeichenfolge hat
^
und$
markiert. Wenn also P das Muster für die URL ist, suchen Sie nach Übereinstimmungen für P.quelle
^(http|https|ftp)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&%\$#\=~])*[^\.\,\)\(\s]$
http://regexpal.com/
. Dort können Sie verschiedene Ausdrücke gegen Ihre Zeichenfolge testen, bis Sie es richtig verstanden haben.Community
Registerkarte, einschließlich solcher für URLsIch habe den folgenden regulären Ausdruck verwendet, um die URL in einer Zeichenfolge zu finden:
quelle
[a-zA-Z]{2,3}
ist wirklich schlecht für passende TLD, siehe offizielle Liste: data.iana.org/TLD/tlds-alpha-by-domain.txtIch benutze diesen Regex:
Es funktioniert gut für viele URLs wie: http://google.com , https://dev-site.io:8080/home?val=1&count=100 , www.regexr.com, localhost: 8080 / path ,. ..
quelle
Kurz und einfach. Ich habe noch keinen Javascript-Code getestet, aber es sieht so aus, als würde es funktionieren:
Code auf regex101.com
quelle
Eine wahrscheinlich zu vereinfachte, aber funktionierende Methode könnte sein:
Ich habe es auf Python getestet und solange das String-Parsing ein Leerzeichen davor und danach und keines in der URL enthält (was ich noch nie gesehen habe), sollte es in Ordnung sein.
Hier ist eine Online-Idee, die dies demonstriert
Hier sind jedoch einige Vorteile der Verwendung:
file:
undlocalhost
sowie IP-Adressen#
oder-
(siehe URL dieses Beitrags)quelle
Die Verwendung des von @JustinLevene bereitgestellten regulären Ausdrucks hatte nicht die richtigen Escape-Sequenzen für die Schrägstriche. Aktualisiert, um jetzt korrekt zu sein, und unter der Bedingung hinzugefügt, dass es auch dem FTP-Protokoll entspricht: Stimmt mit allen URLs mit oder ohne Protokolle und ohne "www" überein.
Code:
^((http|ftp|https):\/\/)?([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:\/~+#-]*[\w@?^=%&\/~+#-])?
Beispiel: https://regex101.com/r/uQ9aL4/65
quelle
VERBESSERT
Erkennt solche URLs:
Regex:
quelle
Schrieb selbst einen auf:
Es funktioniert in ALLEN der folgenden Domänen:
Sie können sehen, wie es hier auf regex101 funktioniert, und nach Bedarf anpassen
quelle
Dies ist eine leichte Verbesserung / Anpassung an (je nachdem, was Sie brauchen) Rajeevs Antwort:
Siehe hier für ein Beispiel von dem, was es tut und nicht übereinstimmt.
Ich habe den Scheck für "http" usw. losgeworden, da ich URLs ohne diesen abfangen wollte. Ich habe den regulären Ausdruck leicht hinzugefügt, um einige verschleierte URLs abzufangen (dh wo der Benutzer [Punkt] anstelle eines "." Verwendet). Schließlich habe ich "\ w" durch "AZ" bis "{2,3}" ersetzt, um Fehlalarme wie v2.0 und "moo.0dd" zu reduzieren.
Alle Verbesserungen an diesem Willkommen.
quelle
[a-zA-Z]{2,3}
ist wirklich schlecht für passende TLD, siehe offizielle Liste: data.iana.org/TLD/tlds-alpha-by-domain.txt . Außerdem stimmt Ihre Regex_.........&&&&&&
nicht mit einer gültigen URL überein .Ich habe das benutzt
quelle
Wenn Sie eine Erklärung für jeden Teil wünschen, versuchen Sie es in regexr [.] Com, wo Sie eine großartige Erklärung für jedes Zeichen erhalten.
Dies wird durch ein "|" oder "ODER", da nicht alle verwendbaren URIs "//" haben. Hier können Sie eine Liste von Schemata als oder Bedingungen erstellen, an denen Sie interessiert sind.
quelle
Ich habe die c # Uri-Klasse verwendet und sie funktioniert gut mit der IP-Adresse localhost
quelle
Ich mochte die Lösung von Stefan Henze, aber sie würde 34,56 erreichen. Es ist zu allgemein und ich habe HTML nicht analysiert. Es gibt 4 Anker für eine URL;
www,
http: \ (und co),
. gefolgt von Buchstaben und dann /,
oder Briefe. und eine davon: https://ftp.isc.org/www/survey/reports/current/bynum.txt .
Ich habe viele Informationen aus diesem Thread verwendet. Danke euch allen.
Oben wird fast alles gelöst, außer einer Zeichenfolge wie "eurls: www.google.com, facebook.com, http: //test.com/", die als einzelne Zeichenfolge zurückgegeben wird. Tbh idk, warum ich Gopher usw. hinzugefügt habe. Beweis R-Code
quelle
Ich benutze die Logik, Text zwischen zwei Punkten oder Punkten zu finden
Die Regex unten funktioniert gut mit Python
quelle
Das Abgleichen einer URL in einem Text sollte nicht so komplex sein
(?:(?:(?:ftp|http)[s]*:\/\/|www\.)[^\.]+\.[^ \n]+)
https://regex101.com/r/wewpP1/2
quelle
Dies ist die einfachste. welche arbeiten für mich gut.
quelle
Es ist einfach.
Verwenden Sie dieses Muster:
\b((ftp|https?)://)?([\w-\.]+\.(com|net|org|gov|mil|int|edu|info|me)|(\d+\.\d+\.\d+\.\d+))(:\d+)?(\/[\w-\/]*(\?\w*(=\w+)*[&\w-=]*)*(#[\w-]+)*)?
Es passt zu jedem Link, der Folgendes enthält:
Zulässige Protokolle: http, https und ftp
Zulässige Domänen: * .com, * .net, * .org, * .gov, * .mil, * .int, * .edu, * .info und * .me ODER IP
Zulässige Ports: true
Zulässige Parameter: true
Erlaubte Hashes: wahr
quelle
Dies ist der beste.
quelle