Googling Awal menunjukkan bahwa tidak ada cara bawaan untuk melakukan ekspresi reguler dalam aplikasi Kakao Objective-C.
Jadi empat pertanyaan:
Benarkah itu benar?
Apakah kamu bercanda?
Oke, lalu adakah perpustakaan sumber terbuka yang bagus yang Anda rekomendasikan?
Apa cara untuk cukup dekat tanpa mengimpor perpustakaan, mungkin dengan kelas NSScanner?
objective-c
regex
cocoa
Dreeves
sumber
sumber
Jawaban:
Saya perhatikan bahwa pada iOS 4.0 Apple menyediakan kelas NSRegularExpression . Selain itu, sebagai 10,7, kelas tersedia di bawah OS X .
sumber
RegExKitLite misalnya tidak memerlukan pustaka, cukup tambahkan .m dan .h ke proyek Anda.
(Keluhan saya terhadap RegExKitLite adalah bahwa ia memperluas NSString melalui kategori, tetapi juga dapat dianggap sebagai fitur. Juga menggunakan pustaka ICU nonpublik yang dikirim dengan OS, yang tidak direkomendasikan oleh Apple.)
sumber
[myString rangeOfString:@"regex_here" options:NSRegularExpressionSearch]
RegexKit adalah yang terbaik yang saya temukan. Sangat Cocoa: y. Saya menggunakan versi "Lite" di beberapa aplikasi iPhone kami:
sourceforge
lingonikorg
sumber
Anda dapat menggunakan pustaka POSIX Regular Expressions (Yay untuk OS yang mendukung POSIX). Mencoba
sumber
Solusi hack murah dan kotor yang saya gunakan untuk memecahkan masalah parsing REGEX dan JSON adalah membuat objek UIWebView dan menyuntikkan fungsi Javascript untuk melakukan parsing. Fungsi javascript kemudian mengembalikan string nilai (atau daftar nilai) yang saya pedulikan. Bahkan, Anda dapat menyimpan satu set fungsi perpustakaan kecil yang dikustomisasi untuk tugas-tugas tertentu dan kemudian memanggilnya sesuai kebutuhan.
Saya tidak tahu apakah ini teknik skala untuk volume besar permintaan parsing berulang, tetapi untuk hal transaksional cepat itu menyelesaikan pekerjaan tanpa tergantung pada sumber daya eksternal atau kode yang Anda mungkin tidak mengerti.
sumber
Saya suka kerangka AGRegex yang menggunakan PCRE, berguna jika Anda terbiasa dengan sintaks PCRE. Versi terbaik dari kerangka kerja ini adalah yang ada di klien IRC Colloquy karena telah ditingkatkan untuk menggunakan PCRE 6.7:
http://colloquy.info/project/browser/trunk/Frameworks/AGRegex
Ini sangat ringan, lebih dari RegExKit (walaupun tentu saja tidak mampu).
sumber
NSRegularExpression
tersedia sejak Mac OS X v10.7 dan iOS 4.0.sumber
Selama pencarian saya tentang topik ini saya menemukan CocoaOniguruma yang menggunakan Oniguruma , mesin Ekspresi Reguler di belakang Ruby1.9 dan PHP5. Tampaknya sedikit lebih baru dibandingkan dengan OregKit yang ada (dalam bahasa Jepang). Tidak yakin bagaimana ini menumpuk pada binding lainnya.
sumber
Googling alittle, menemukan perpustakaan ini: RegexOnNSString
Pustaka sumber terbuka, yang berisi fungsi-fungsi seperti:
dan menggunakan
NSRegularExpression
kelas. Cukup mudah digunakan dan tidak perlu khawatir tentang apa pun.Harap dicatat,
NSRegularExpression
tersedia sejak Mac OS X v10.7 dan iOS 4.0, seperti yang disebutkan Datasmid.sumber
Saya membuatnya mudah. Saya menambahkan file C ++ baru ke proyek Objective C saya, ganti namanya menjadi .mm, dan kemudian buat kelas C ++ standar di dalamnya. Kemudian, saya membuat metode kelas statis di bagian "publik:" untuk fungsi C ++ yang mengambil NSString dan mengembalikan NSString (atau NSArray, jika itu yang Anda inginkan). Saya kemudian mengonversi NSString ke C ++ std :: string seperti ini:
Dari sana, saya bisa menggunakan regex_replace seperti:
Lalu, saya bisa mengonversi std :: string itu kembali menjadi NSString dengan:
Jika Anda hanya menggunakan C ++ ini hanya untuk fungsi ini, maka Anda mungkin merasa cocok untuk memanggil file ini extra.mm (nama kelas Extra) dan memasukkan metode kelas statis ini, dan kemudian menambahkan metode kelas statis lainnya ketika situasi tiba di mana masuk akal untuk melakukannya di C ++ karena itu kurang merepotkan dalam beberapa kasus. (Ada beberapa kasus di mana ObjC melakukan sesuatu dengan lebih sedikit baris kode, dan beberapa kasus di mana C ++ melakukannya dengan lebih sedikit baris kode.)
PS Masih cara lain dengan ini adalah dengan menggunakan file .mm tetapi membuat pembungkus Objective C sekitar penggunaan std :: string dan std :: regex_replace () (atau regex_match ()).
sumber