регулярное выражение не работает в быстрой - PullRequest
0 голосов
/ 12 июня 2018

Я использую регулярное выражение для поиска всех \n вхождений в строке.

Само регулярное выражение работает:

enter image description here

Выражение находит \n, но не \\n.Что я и хочу.

Однако, когда я хочу реализовать это в Swift для iOS-приложения, я получаю ошибку: invalid regex: The value „(?<!\)\n“ is invalid.

Мой код выглядит так (послеРеализация подхода \ из комментариев:

import UIKit

var str = "Hello, \n \\n playground"

let regex = try? NSRegularExpression(pattern: "(?<!\\\\)\\n", options: .caseInsensitive)

let matches = regex?.matches(in: str, options: .anchored, range: NSMakeRange(0, str.count))

print(matches)

matches - ноль. Он должен найти \n.

1 Ответ

0 голосов
/ 12 июня 2018

Регулярное выражение скомпилировано с параметром .anchored, который требует, чтобы шаблон совпадал только в начале строки:

Указывает, что совпадения ограничены значениями вначало диапазона поиска.

Вам необходимо удалить эту опцию, например,

let matches = regex?.matches(in: str, options: [], range: NSMakeRange(0, str.count))

Обратите внимание, что строковый литерал "(?<!\\\\)\\n" определяет (?<!\\)\n шаблон регулярного выражения, соответствующий

  • (?<!\\) - место в строке, которому непосредственно не предшествует \ char
  • \n - символ новой строки, LF.

См. Демо regex онлайн .

...