Начальный поиск в Google указывает, что в приложении Objective-C Cocoa нет встроенного способа выполнения регулярных выражений.
Итак, четыре вопроса:
Это действительно так?
Ты шутишь, что ли?
Хорошо, тогда есть ли хорошая библиотека с открытым исходным кодом, которую вы рекомендуете?
Как можно приблизиться достаточно близко, не импортируя библиотеку, возможно, с помощью класса NSScanner?
objective-c
regex
cocoa
dreeves
источник
источник
Ответы:
Я заметил, что с iOS 4.0 Apple предоставляет класс NSRegularExpression . Кроме того, как 10,7, класс доступен под OS X .
источник
Например, RegExKitLite не требует никаких библиотек, просто добавьте .m и .h к вашему проекту.
(Моя жалоба на RegExKitLite заключается в том, что он расширяет NSString через категорию, но его тоже можно рассматривать как функцию. Также он использует непубличные библиотеки ICU, поставляемые с ОС, что не рекомендуется Apple.)
источник
[myString rangeOfString:@"regex_here" options:NSRegularExpressionSearch]
RegexKit - лучшее, что я нашел. Очень Какао: у. Я использую версию Lite в нескольких наших приложениях для iPhone:
SourceForge
lingonikorg
источник
Вы можете использовать библиотеку регулярных выражений POSIX (Yay для POSIX-совместимой ОС). Пытаться
источник
Дешевое и грязное решение для взлома, которое я использую для решения проблем синтаксического анализа REGEX и JSON, заключается в создании объекта UIWebView и внедрении функций Javascript для выполнения анализа. Затем функция javascript возвращает строку значения (или списка значений), который мне небезразличен. Фактически, вы можете хранить небольшой набор библиотек функций, настроенных для конкретных задач, а затем просто вызывать их по мере необходимости.
Я не знаю, если этот метод масштабируется до огромных объемов повторных запросов на синтаксический анализ, но для быстрых транзакций он выполняет свою работу без зависимости от каких-либо дополнительных внешних ресурсов или кода, который вы можете не понять.
источник
Мне нравится среда AGRegex, которая использует PCRE, удобно, если вы привыкли к синтаксису PCRE. Лучшая версия этой инфраструктуры - та, что в IRC-клиенте Colloquy, поскольку она была обновлена для использования PCRE 6.7:
http://colloquy.info/project/browser/trunk/Frameworks/AGRegex
Это очень легкий, намного больше, чем RegExKit (хотя, конечно, не так хорошо).
источник
NSRegularExpression
доступно начиная с Mac OS X v10.7 и IOS 4.0.источник
Во время поиска по этой теме я наткнулся на CocoaOniguruma, который использует Oniguruma , движок регулярных выражений, стоящий за Ruby1.9 и PHP5. Кажется, немного новее по сравнению с существующим OregKit (на японском языке). Не уверен, как они складываются против других привязок.
источник
Погуглив немного, нашел эту библиотеку: RegexOnNSString
Библиотека с открытым исходным кодом, содержащая такие функции, как:
и используя
NSRegularExpression
класс. Довольно прост в использовании и не нужно ни о чем беспокоиться.Обратите внимание, что
NSRegularExpression
это доступно начиная с Mac OS X v10.7 и IOS 4.0, как упоминал Datasmid.источник
Я делаю это легко. Я добавляю новый файл C ++ в свой проект Objective C, переименовываю его в .mm, а затем создаю стандартный класс C ++ внутри. Затем я делаю метод статического класса в разделе "public:" для функции C ++, которая принимает NSString и возвращает NSString (или NSArray, если это то, что вы хотите). Затем я конвертирую NSString в C ++ std :: string примерно так:
Оттуда я могу использовать regex_replace так:
Затем я могу преобразовать эту std :: string обратно в NSString с помощью:
Если вы используете этот C ++ только для этой функции, то вам может пригодиться вызвать этот файл extra.mm (имя класса Extra) и поместить этот метод статического класса, а затем добавить другие методы статического класса, когда ситуация придет. где просто имеет смысл делать это в C ++, потому что в некоторых случаях это менее хлопотно. (В некоторых случаях ObjC делает что-то с меньшим количеством строк кода, а в некоторых случаях C ++ делает это с меньшим количеством строк кода.)
PS Еще один способ - использовать файл .mm, но создать оболочку Objective C для использования std :: string и std :: regex_replace () (или regex_match ()).
источник