2017-05-19 6 views
0

Ich versuche, den Wert des Titels mit regulären Ausdruck zu erhalten. Was ist mit diesem regulären Ausdruck falsch? Match kommt gleich Null.regulärer Ausdruck Problem, wenn Zeichenfolge enthält n

let strToCheck = "<title>youtube \n </title>" 
let rgx = "<title(.*?)>(.*?)</title>" 

let rx = try NSRegularExpression(pattern: rgx, options: [.caseInsensitive]) 

if let match = rx.firstMatch(in: strToCheck, options: [], range: 
      NSMakeRange(0, string.characters.count)) { 

    } 

Antwort

5

Das ursprüngliche Problem ist, weil Sie nicht / entging, die Sie regex Pausen macht. Sie müssen \ vor dem Schrägstrich wie folgt hinzuzufügen:

<title(.*?)>(.*?)<\/title> 

Demo url

Wie Wiktor Stribiżew in seinem Kommentar unter diesem Swift den Slash ich die Regex aktualisiert haben zu entkommen braucht nicht erklärt neue Linie Fälle übereinstimmen als folgende:

<title(.*?)>(?s).*?</title> 

Demo URL

Hinweis: In der Demo gibt es ein Escape-Zeichen für /, aber es ist nicht notwendig für Swift

+0

Es gibt absolut keine Notwendigkeit, einen Schrägstrich in einem schnellen Regex-Muster zu entkommen. Das mehrzeilige Flag definiert nur das Verhalten von Ankern neu, die hier nicht verwendet werden. –

+0

Oh, ich wusste das nicht über schnellen Dank für die Klärung! , aber ich habe meine Antwort aktualisiert, um neue Zeile Fällen zu entsprechen, wenn es dort ist –

+0

Das Update hat nicht die Lösung richtig gemacht, das ist ein schreckliches Muster. Bitte überlegen Sie, ob Sie die falsche Antwort oder den Fehler behoben haben. Verwenden Sie niemals '(. | \ N +) *?' - es ist ein großartiger Performance-Killer. –

Verwandte Themen