RegEx в Swift?
Я изучаю Свифт, и у меня есть (другой) вопрос. Существуют ли регулярные эпсионы в Swift, и если да, то как их использовать?
В моих исследованиях я нашел некоторую противоречивую информацию. В документах Apple Developer есть что-то, упоминающее RegEx, но оно выглядит так, как любой другой язык, который я видел. Если это решение, как его использовать?
Этот веб-сайт, с другой стороны, предполагает, что RegEx не существует в Swift. Правильно ли это?
В случае, если это помогает, я пытаюсь использовать регулярное выражение, чтобы получить среднюю цену биткойна из API в стиле JSON, который содержит цену, но также много чего не хочу.
Извините за другой основной вопрос.
Ответы
Ответ 1
К сожалению, Swift не имеет регулярных выражений. Но внешняя ссылка, на которую вы ссылаетесь, предоставляет два способа использования регулярных выражений.
- Создайте оболочку класса вокруг NSRegularExpression и используйте этот класс.
- Вызов метода Foundation
rangeOfString:options:
с RegularExpressionSearch
как опция. Это в Свифт.
Второй способ чище и проще реализовать.
Определение метода метода в Swift
func rangeOfString(_ aString: String!,options mask: NSStringCompareOptions) -> NSRange
Вы можете использовать его с регулярным выражением как:
let myStringToBeMatched = "ThisIsMyString"
let myRegex = "ing$"
if let match = myStringToBeMatched.rangeOfString(myRegex, options: .RegularExpressionSearch){
println("\(myStringToBeMatched) is matching!")
}
Здесь документация Apple на rangeOfString()
Ответ 2
Я столкнулся с той же проблемой. Итак, я написал небольшую обертку - https://gist.github.com/ningsuhen/dc6e589be7f5a41e7794. Добавьте в проект проект Regex.swift и добавьте фреймворк Foundation, если он еще не добавлен. После этого вы можете использовать методы replace и match следующим образом.
"+91-999-929-5395".replace("[-\\s\\(\\)]", template: "") //replace with empty or remove
"+91-999-929-5395".match("[-\\s\\(\\)]") //simple match - returns only true or false, not the matched patterns.
Ответ 3
Еще один простой способ - использовать NSPredicate, если вы заинтересованы в чистой проверке (true/false):
Здесь быстрое Regex соответствует канадскому почтовому индексу:
func isCAZipValid(_ zip: String) -> Bool {
return NSPredicate(format: "SELF MATCHES %@", "^([A-Z]\\d[A-Z])(\\s|-)?(\\d[A-Z]\\d)$")
.evaluate(with: zip.uppercased())
}
Ответ 4
Swift не имеет регулярного выражения, поэтому вам нужно будет реализовать класс-оболочку самостоятельно или использовать некоторую библиотеку, подобную этой, которая реализует класс Regex http://www.dollarswift.org/#regex