2016-04-19 15 views
0

hav ich die folgenden, die Spiele von einem String in einem anderen String bekommt:Regular Expression nicht erwartetes Ergebnis in Swift Rückkehr

let a : String = "https://www.example.com" 
let b = a as NSString 
let regex : NSRegularExpression = try! NSRegularExpression(pattern: "(\\.(.*)\\. || /(.*)\\.)", options: .CaseInsensitive) 
let text = regex.matchesInString(a, options: [], range: NSMakeRange(0, b.length)) 
return text.map {b.substringWithRange($0.range)}[0].stringByReplacingOccurrencesOfString(".", withString: "") 

Das Ziel ist es, eine besser lesbare Version des Domain-Namens zu erstellen. Zum Beispiel - https://www.example.com sollte werden: Beispiel

Aber dies gibt eine leere Zeichenfolge zurück.

Ist etwas falsch mit meinem Regulären Ausdruck?

Antwort

1

Sie haben Leerzeichen in Ihrem Regex-Muster.

Sie verwenden ||. Dies bedeutet nicht ODER in einem Regex-Muster.

Sie verschachteln Parens.

Ich habe Ihre Regex geändert und es macht, was Sie erwarten.

let a : String = "https://www.example.com" 
let b = a as NSString 
let regex : NSRegularExpression = try! NSRegularExpression(pattern: "\\.(.*)\\.", options: .CaseInsensitive) 
let text = regex.matchesInString(a, options: [], range: NSMakeRange(0, b.length)) 
return text.map {b.substringWithRange($0.range)}[0].stringByReplacingOccurrencesOfString(".", withString: "") 

Ausgänge:

"example" 
+0

Kann man nicht eine ODER-Operation in einem RegexMuster haben? –

+0

Sicher. Sie verwenden eine einzelne | Und umgib es nicht mit Leerzeichen. Die Leerzeichen sind ebenfalls Zeichen und werden angepasst. – ryantxr