2016-11-20 3 views
-1

Ich verwende die Regex unten für validate Strings wie:Warum Regex nicht mit Java-Klassen oder JRegex-Klassen übereinstimmt?

c: \ folder1

x: \ Ordner-a

Regex 1: ^ (?: [A-zA-Z ]: (\ | /) | file: // | \\ |. (/ | \)) ([^ \ /: * \? \ <> \ "\ |] + (\ | /) {0,1 }) + $

Regex 2: ([AZ]: \ [^ /: * \? <> \ |] +. \ W {2,6}) | (\ {2} [^ /: * \? <> \ |] +. \ W {2,6})

ich regex online auf verschiedenen Websites überprüft und sie entsprechen aber nicht mit java \ Java-Bibliotheken entsprechen:

Beispiel:

String regex = ...load string from file... 
Pattern p = Pattern.compile(regex); 
Matcher m = p.matcher("c:\\folder1"); 
m.matches(); //return false 
m.find(); //return false 

im Debug-Modus der Ausdruck:

regex.equals("pasted regex manually") 
returns true for both regex 

ich überprüft die Regex und haben keine Eindringlinge Zeichen.

Das Verhalten tritt sowohl bei Java als auch bei JRegex-Klassen auf.

Warum? was mache ich falsch?

Danke!

Antwort

1

Ich denke, wenn Sie das Muster aus einer Datei erhalten, müssen Sie Backslashes nicht entkommen, da es nur benötigt wird, wenn Sie eine Zeichenfolge in einer Variablen darstellen möchten. Außerdem sind die meisten deiner Fluchten nutzlos. Test mit:

Regex1:

^(?:[a-zA-Z]:[\\/]|file://|\\\\|\.[\\/])([^\\:*?<>"|]+[\\/]?)+$ 

Regex2:

([A-Z]:\\[^/:*\\?<>|]+.\w{2,6})|(\\\\[^/:*\\?<>|]+.\w{2,6}) 
Verwandte Themen