Ваше регулярное выражение в порядке. Проблема в том, что publicKey.count
будет считать окончания строк, такие как \r\n
, как один символ.
Вы можете решить проблему, используя
let range = NSMakeRange(0, publicKey.utf16.count)
Или просто используйте .replacingOccurrences
с .regularExpression
опция:
let publicKey = "-----BEGIN RSA PUBLIC KEY-----\n0123456789\r\n0123456789\r\nabcdefgh\n-----END RSA PUBLIC KEY-----"
let regex = "(?i)(\n)?-* ?(BEGIN|END) ((PRIVATE RSA|PUBLIC RSA)|(RSA PRIVATE|RSA PUBLIC)|(PRIVATE|PUBLIC)) KEY ?-*(\n)?"
print( publicKey.replacingOccurrences(of: regex, with: "", options: [.regularExpression]) )
// => 0123456789
// 0123456789
// abcdefgh
На всякий случай, если вы хотите сократить шаблон, используйте
(?i)\n?-* ?(?:BEGIN|END) (?:(?:PRIVATE|PUBLIC)(?: RSA)?|RSA (?:PRIVATE|PUBLIC)) KEY ?-*\n?
См. регулярное выражение регулярных выражений