Я хочу совместить линию локализации с регулярным выражением. Все работает отлично, если не пытаться сопоставить эту строку. Вы можете поместить код на игровой площадке, чтобы увидеть, что он не останавливается, или в пустом проекте, чтобы увидеть, что процессор будет 100% и застрял на линии «let match». Теперь интересно, если вы удалите последнее слово, которое оно работает. Я не знаю, работает ли с китайскими или другими странными символами, это греческий.Swift и регулярное выражение, cpu идет haywire для некоторых строк
let lineContent = "\"key\" = \" Χρήση παλιάς συνόμευση\";"
if let r = try? NSRegularExpression(pattern: "\"(.*)+\"(^|[ ]*)=(^|[ ]*)\"(.*)+\";", options: NSRegularExpressionOptions()) {
let match = r.matchesInString(lineContent, options: NSMatchingOptions(), range: NSMakeRange(0, lineContent.characters.count))
match.count
}
Позже изменения: это на самом деле не имеет значения, символы типа, но количество слов. Эта строка положить в правой стороне тоже не работает: «JHG jhgjklkhjkh HHHHH HHH»
Я думаю, что часть проблемы является первым '+' (. *) - как это будет захватывать все впереди. Попробуйте сделать это ленивым: '(. *?)'. – sideroxylon
Вы действительно хотите использовать регулярное выражение для этого? Кажется, что простой парсер будет делать и будет намного эффективнее. – Kametrixom
У вас есть вложенные кванторы в '(. *) +', Что приведет к [катастрофическому обратному отскоку] (http://www.regular-expressions.info/catastrophic.html).Возможно, что-то вроде '' \ '([^ \ "] *) \" [] * = [] * \ "([^ \"] *) \ ";" ' – Mariano