Ich benutze RegexBuddy, während ich mit regulären Ausdrücken arbeite. Aus seiner Bibliothek habe ich den regulären Ausdruck kopiert, um mit den URLs übereinzustimmen. Ich habe erfolgreich in RegexBuddy getestet. Wenn ich es jedoch als Java- String
Version kopiert und in Java-Code eingefügt habe, funktioniert es nicht. Die folgenden Klassen drucken false
:
public class RegexFoo {
public static void main(String[] args) {
String regex = "\\b(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|]";
String text = "http://google.com";
System.out.println(IsMatch(text,regex));
}
private static boolean IsMatch(String s, String pattern) {
try {
Pattern patt = Pattern.compile(pattern);
Matcher matcher = patt.matcher(s);
return matcher.matches();
} catch (RuntimeException e) {
return false;
}
}
}
Weiß jemand was ich falsch mache?
java
regex
regexbuddy
Sergio del Amo
quelle
quelle
Antworten:
Versuchen Sie stattdessen die folgende Regex-Zeichenfolge. Ihr Test wurde wahrscheinlich in Groß- und Kleinschreibung durchgeführt. Ich habe die Kleinbuchstaben sowie einen richtigen Platzhalter für den Zeichenfolgenanfang hinzugefügt.
Das funktioniert auch:
Hinweis:
quelle
Der beste Weg, dies jetzt zu tun, ist:
BEARBEITEN: Code von
Patterns
von https://github.com/android/platform_frameworks_base/blob/master/core/java/android/util/Patterns.java :quelle
java
Lösung sucht , nichtandroid
Ich werde einen Standard versuchen "Warum machst du das so?" Antwort ... Weißt du was
java.net.URL
?Das obige wird ein auslösen,
MalformedURLException
wenn die URL nicht analysiert werden kann.quelle
Das Problem bei allen vorgeschlagenen Ansätzen: Alle RegEx validieren
Der gesamte RegEx-basierte Code ist überarbeitet: Es werden nur gültige URLs gefunden! Als Beispiel wird alles ignoriert, was mit "http: //" beginnt und Nicht-ASCII-Zeichen enthält.
Noch mehr: Ich habe mit dem Java RegEx-Paket (Filtern von E-Mail-Adressen aus Text) Verarbeitungszeiten von 1-2 Sekunden (Single-Threaded, dediziert) für sehr kleine und einfache Sätze festgestellt, nichts Spezielles; möglicherweise Fehler in Java 6 RegEx ...
Die einfachste / schnellste Lösung wäre, StringTokenizer zu verwenden, um Text in Token aufzuteilen, Token, die mit "http: //" usw. beginnen, zu entfernen und Token erneut in Text zu verketten.
Wenn Sie E-Mails aus Text filtern möchten (weil Sie später NLP-Mitarbeiter usw. beschäftigen werden), entfernen Sie einfach alle Token, die "@" enthalten.
Dies ist ein einfacher Text, bei dem RegEx von Java 6 fehlschlägt. Versuchen Sie es in verschiedenen Varianten von Java. In einer lang laufenden Single-Threaded-Testanwendung dauert es ungefähr 1000 Millisekunden pro RegEx-Aufruf:
Verlassen Sie sich nicht auf reguläre Ausdrücke, wenn Sie nur Wörter mit "@", "http: //", "ftp: //", "mailto:" filtern müssen. Es ist ein enormer technischer Aufwand.
Wenn Sie RegEx wirklich mit Java verwenden möchten, versuchen Sie es mit Automaton
quelle
it will find only valid URLs!
- das ist das Ziel der Frage von OP. Vermisse ich etwasIn Übereinstimmung mit der Antwort von billjamesdev gibt es hier einen anderen Ansatz zum Überprüfen einer URL ohne Verwendung eines RegEx:
Sehen Sie sich in der Apache Commons Validator- Bibliothek die Klasse UrlValidator an . Ein Beispielcode:
Erstellen Sie einen UrlValidator mit gültigen Schemata "http" und "https".
Wenn stattdessen der Standardkonstruktor verwendet wird.
druckt aus "URL ist gültig"
quelle
Das funktioniert auch:
Hinweis:
Daher ist der erste wahrscheinlich für den allgemeinen Gebrauch nützlicher.
quelle
hier überprüfen: - https://www.freeformatter.com/java-regex-tester.html#ad-output
Diese Einträge werden korrekt sortiert
quelle
Wenn Sie reguläre Ausdrücke aus der Bibliothek von RegexBuddy verwenden, stellen Sie sicher, dass Sie in Ihrem eigenen Code dieselben Übereinstimmungsmodi verwenden wie den regulären Ausdruck aus der Bibliothek. Wenn Sie auf der Registerkarte Verwenden ein Quellcode-Snippet generieren, legt RegexBuddy automatisch die richtigen Übereinstimmungsoptionen im Quellcode-Snippet fest. Wenn Sie den regulären Ausdruck kopieren / einfügen, müssen Sie dies selbst tun.
In diesem Fall haben Sie, wie andere betonten, die Option für die Unempfindlichkeit gegenüber Groß- und Kleinschreibung verpasst.
quelle