একটি উদ্দেশ্য-সি কোকো অ্যাপ্লিকেশনটিতে নিয়মিত প্রকাশ


173

প্রাথমিক গুগলিং ইঙ্গিত দেয় যে কোনও উদ্দেশ্য-সি কোকো অ্যাপ্লিকেশনটিতে নিয়মিত প্রকাশ করার কোনও অন্তর্নির্মিত উপায় নেই।

সুতরাং চারটি প্রশ্ন:

  1. এটা কি সত্যি?

  2. আপনি কি আমার সাথে মজা করছেন?

  3. ঠিক আছে, তাহলে আপনি যে প্রস্তাবিত একটি দুর্দান্ত ওপেন সোর্স লাইব্রেরি আছে?

  4. কোনও এনএসএস স্ক্যানার ক্লাসের সাথে কোনও পাঠাগার আমদানি না করে পর্যাপ্ত কাছাকাছি যাওয়ার উপায়গুলি কী কী?


4
হুমমম ... আমি অবাক হয়েছি আপনি যদি মনোোটুচ ব্যবহার করেন তবে কি হবে। প্রশ্নের জন্য +1।
ড্যান রোজনস্টার্ক

উত্তর:


141

আমি লক্ষ্য করেছি যে আইওএস ৪.০ হিসাবে অ্যাপল একটি এনএসআরগুলারএক্সপ্রেস ক্লাস সরবরাহ করে । অতিরিক্ত হিসাবে, 10.7 হিসাবে, ক্লাসটি ওএস এক্স এর অধীনে উপলব্ধ ।


11
এছাড়াও এখন ম্যাক ওএস এক্স 10.7
ব্যবহারকারী 102008

42
  1. হ্যাঁ, কোকোয় কোনও রেগেক্স সমর্থন নেই। আপনি যদি কেবল বুলিয়ান মেলানোতে আগ্রহী হন তবে আপনি এনএসপ্রেডিকেট ব্যবহার করতে পারেন যা আইসিইউ রেজেক্স সিনট্যাক্স সমর্থন করে। তবে সাধারণত আপনি ম্যাচের অবস্থান বা subexpressions এর অবস্থান সম্পর্কে আগ্রহী হন এবং আপনি এটি এনএসপ্রেডিকেট দিয়ে পেতে পারেন না।
  2. উল্লিখিত হিসাবে আপনি রেজেক্স পসিক্স ফাংশন ব্যবহার করতে পারেন । তবে এগুলি ধীর হিসাবে বিবেচনা করা হয়, এবং অন্যান্য সমাধানগুলির (আইসিইউ / পিসিসি ) তুলনায় রেজেক্স সিনট্যাক্স সীমাবদ্ধ ।
  3. অনেকগুলি ওএসএস লাইব্রেরি রয়েছে, কোকোদেভের একটি বিস্তৃত তালিকা রয়েছে
  4. উদাহরণস্বরূপ RegExKitLite এর জন্য কোনও লাইব্রেরি লাগবে না, কেবলমাত্র আপনার প্রকল্পে .m এবং .h যোগ করুন।

    (রেজিএক্সকিটলাইটের বিরুদ্ধে আমার অভিযোগ হ'ল এটি এনএসএসটিং বিভাগের মাধ্যমে প্রসারিত করেছে তবে এটি একটি বৈশিষ্ট্য হিসাবেও বিবেচনা করা যেতে পারে Also এছাড়াও এটি ওএসের সাথে প্রেরিত নন-প্রজাতন্ত্রের আইসিইউ লাইব্রেরি ব্যবহার করে, যা অ্যাপল দ্বারা প্রস্তাবিত নয় isn't)


3
মনে রাখবেন যে পসিক্স রেজেেক্স ফাংশনগুলি ইউনিকোড (কেবলমাত্র এএসসিআইআই) দিয়ে কাজ করে না।
টম ডালিং

এফওয়াইআই যে এনএসপ্রেডিকেট ইউআরএল একটি ভাঙা লিঙ্ক
তাবার

11
আইওএস স্ট্রিং অনুসন্ধানগুলির জন্য নিয়মিত অভিব্যক্তি সমর্থন করে, যেমন[myString rangeOfString:@"regex_here" options:NSRegularExpressionSearch]
নেস্টর

1
সিংহ (10.7) তেও উপলব্ধ #if MAC_OS_X_VERSION_10_7 <= MAC_OS_X_VERSION_MAX_ALLOWED || __IPHONE_3_2 <= __IPHONE_OS_VERSION_MAX_ALLOWED
ম্যাকিয়েজ সুইচ

ননপাবলিক আইসিইউ লাইব্রেরিগুলি ব্যবহার করা আমার পক্ষে ঠিক আছে, কারণ আপনার যদি এটি ব্যবহারের প্রয়োজন হয় তবে এটি আপনার কোকো সংস্করণে কোনও বিল্ট-ইন রেজেক্স সমর্থন নেই। আপনি যদি এই লাইব্রেরিগুলি ব্যবহার করেন তবে এর অর্থ হ'ল আপনি পুরানো সিস্টেমগুলির জন্য বিল্ডিং করছেন যা সেগুলি অসমর্থিত হওয়ায় আর পরিবর্তন করা হবে না। আপনি যদি পুরনো এবং নতুন উভয়ের জন্যই বিল্ডিং করেন, যদি NSRegularExpression বিদ্যমান না থাকে তবে আপনি RegExKitLiteটিকে ফ্যালব্যাক হিসাবে ব্যবহার করেন। (হ্যাঁ, এখনও পুরানো সিস্টেমে লোকেরা কাজ করছেন)।

19

RegexKit আমি খুঁজে পাওয়া সবচেয়ে ভাল। খুব কোকো: y আমি আমাদের আইফোন অ্যাপগুলির বেশ কয়েকটিতে "লাইট" সংস্করণটি ব্যবহার করছি:

SourceForge

lingonikorg


1
আমি দ্বিতীয় রেজেক্সকিট লাইট। খুব সুন্দর!
ডেভ ড্রিবিন

1
শীতল, যত বেশি লোকেরা এটি ব্যবহার করে, সম্ভবত এটি তত উন্নত হয়!
এভোক্যাড

12

আপনি পসিএক্স রেগুলার এক্সপ্রেশন লাইব্রেরি ব্যবহার করতে পারেন (একটি পসিক্স কমপ্লায়েন্ট ওএসের জন্য হ্যাঁ)। চেষ্টা

man 3 regex

আচ্ছা বুঝলাম. এটি সরাসরি সি-তে এটি করার একটি উপায় যা সম্ভবত কোনও উদ্দেশ্য-সি অ্যাপ্লিকেশনটিতে কাজ করা উচিত। শীতল ধন্যবাদ! এটি কি মূলত এটি করার জন্য গৃহীত উপায়?
21

এটি এমন এক উপায়, যাতে কোনও অতিরিক্ত নির্ভরতা প্রয়োজন হয় না। আপনি যে ওপেন সোর্স লাইব্রেরিগুলি আমদানি করতে পারতেন সেগুলির ক্ষেত্রে (পিসিআরই, পার্ল রেজেক্সেসের জন্য, বুস্ট রেজিএক্স লাইব্রেরি যদি আপনি ওবজ-সি ++ ব্যবহার করেন বা অন্য জবাবগুলিতে তালিকাবদ্ধ অন্যগুলি ব্যবহার করেন) তবে অন্যান্য বিকল্প রয়েছে।
অ্যাডাম রাইট

অবজেক্টিভ-সি এর সাথে সরাসরি সি মিশ্রিত করার কোনও অসুবিধা? আপনি কি এনএসএসস্ট্রিং এবং এ থেকে রূপান্তর করার জন্য একটি কোড স্নিপেট অন্তর্ভুক্ত করতে পারেন? আবার ধন্যবাদ!
21

অবজেক্টিভ-সি সি এর উপরে নির্মিত, তাই আপনি সত্যিই কিছু মিশ্রণ করছেন না। যদিও বেশিরভাগ লোক একটি লাইব্রেরি ব্যবহার করেন, যেহেতু এটি এমন একটি এপিআই দেয় যা ব্যবহার করা সহজ।
মার্ক চার্বোনউ

5
এবং কারণ পসিক্স রেজেেক্স ফাংশনগুলি কেবলমাত্র এসকিআইআই স্ট্রিং সহ কাজ করে।
টম ডালিং

8

REGEX এবং JSON পার্সিংয়ের সমস্যাগুলি সমাধান করার জন্য আমি যে সস্তা এবং নোংরা হ্যাক সলিউশনটি ব্যবহার করি তা হ'ল একটি ইউআইউইউভিউ ভিউ অবজেক্ট তৈরি করা এবং পার্সিংয়ের জন্য জাভাস্ক্রিপ্ট ফাংশন (গুলি) ইনজেক্ট করা। জাভাস্ক্রিপ্ট ফাংশন তারপরে আমি যত্ন করি এমন মান (বা মানগুলির তালিকা) এর একটি স্ট্রিং প্রদান করে। প্রকৃতপক্ষে, আপনি নির্দিষ্ট কাজের জন্য কাস্টমাইজড ফাংশনগুলির একটি ছোট লাইব্রেরি সেট সংরক্ষণ করতে পারেন এবং তারপরে কেবল তাদের প্রয়োজন হিসাবে কল করুন।

আমি জানি না যে এই কৌশলটি বারবার পার্সিংয়ের অনুরোধগুলির বিশাল পরিমাণে স্কেল করে কিনা, তবে দ্রুত লেনদেনের জিনিসগুলির জন্য এটি কোনও অতিরিক্ত বাহ্যিক সংস্থান বা কোড যা আপনি বুঝতে না পারছেন তার উপর নির্ভর করে কাজটি সম্পন্ন করে।


7

আমি এজিরেজেক্স ফ্রেমওয়ার্ক পছন্দ করি যা পিসিআরই ব্যবহার করে, আপনি যদি পিসিআরই সিনট্যাক্সের সাথে ব্যবহার করেন তবে সুবিধাজনক। এই ফ্রেমওয়ার্কটির সর্বোত্তম সংস্করণ হ'ল কলাকুই আইআরসি ক্লায়েন্টের মধ্যে একটি এটি পিসিআরই 6.7 ব্যবহারের জন্য আপগ্রেড করা হয়েছে:

http://colloquy.info/project/browser/trunk/Frameworks/AGRegex

এটি খুব লাইটওয়েট, RegExKit এর চেয়ে অনেক বেশি (যদিও কোর্সে সক্ষম নয়)।


এতে যদি সম্পূর্ণ পার্ল-সামঞ্জস্যপূর্ণ রেজেক্স থাকে তবে কম কেন সক্ষম?
8'09

সম্পর্কিত অবজেক্টিভ-সি সহায়তাকারী পদ্ধতিগুলি রেজিএক্সকিটের মতো প্রায় বিস্তৃত নয়, তবে বেশিরভাগ উদ্দেশ্যে তারা সূক্ষ্ম।
রব কেনেগার

6

NSRegularExpression ম্যাক ওএস এক্স ভি 10.7 এবং আইওএস 4.0 থেকে পাওয়া যায়।


5

এই বিষয়টিতে আমার অনুসন্ধানের সময় আমি কোকোঅনিগুরুমা জুড়ে এসেছি যা রুবি 1.9 এবং পিএইচপি 5 এর পিছনে নিয়মিত এক্সপ্রেশন ইঞ্জিন অনিগুরুমা ব্যবহার করে । বিদ্যমান ওরেগকিটের (জাপানি ভাষায়) তুলনায় এটি কিছুটা নতুন বলে মনে হচ্ছে । অন্যান্য বাইন্ডিংয়ের বিরুদ্ধে কীভাবে এই স্ট্যাক আপ রয়েছে তা নিশ্চিত নয়।


4

গুগলিং অ্যালিটল , এই লাইব্রেরিটি পাওয়া গেছে: রিজেক্সঅনএনএসটিস্ট্রিং

ওপেন সোর্স লাইব্রেরিতে এই জাতীয় ফাংশন রয়েছে:

-(NSString *) stringByReplacingRegexPattern:(NSString *)regex withString:(NSString *) replacement caseInsensitive:(BOOL)ignoreCase

এবং NSRegularExpressionক্লাস ব্যবহার । ব্যবহার করা বেশ সহজ এবং কোনও বিষয় নিয়ে চিন্তা করার দরকার নেই।

দয়া করে মনে রাখবেন যে NSRegularExpressionম্যাট ওএস এক্স v10.7 এবং আইওএস 4.0 থেকে ডেটাসমিড যেমন উল্লেখ করেছেন তখন থেকে এটি উপলব্ধ।


1

আমি এটি সহজ করে তোলে আমি আমার অবজেক্টিভ সি প্রকল্পে একটি নতুন সি ++ ফাইল যুক্ত করেছি, এটি নাম করে মিমি রাখি এবং তারপরে ভিতরে একটি স্ট্যান্ডার্ড সি ++ শ্রেণি তৈরি করি। তারপরে, আমি একটি সিএস ++ ফাংশনের জন্য "পাবলিক:" বিভাগে একটি স্ট্যাটিক ক্লাস পদ্ধতি তৈরি করি যা একটি এনএসএসআর্টিং নেয় এবং একটি এনএসএসআর্টিং (বা এনএসআরাই, যদি আপনি এটি চান তবে) প্রদান করে। আমি তারপরে এনএসএসটিংকে সি ++ স্টেডি :: স্ট্রিংয়ে রূপান্তর করি:

// If anyone knows a more efficient way, let me know in the comments.
// The "if" condition below is because ObjC crashes if converting to
// std::string if the string is nil or empty.
// assume #include <string>
std::string s = "";
if (([sInput != nil]) && (!([sInput isEqualTo:@""]))) {
  std::string sTemp([sInput UTF8String]);
  s = sTemp;
}

সেখান থেকে, আমি regex_replace এর মতো ব্যবহার করতে পারি:

// assume #include <regex>
std::string sResult = std::regex_replace(sSource,sRegExp,sReplaceWith);

তারপরে, আমি সেই স্ট্যান্ড :: স্ট্রিংটিকে আবার কোনও এনএসএস স্ট্রিংয়ে রূপান্তর করতে পারি:

NSString *sResponse2 = @(sResult.c_str());

আপনি যদি কেবল এই ক্রিয়াকলাপের জন্য এই সি ++ ব্যবহার করেন তবে আপনি এই ফাইলটিকে অতিরিক্ত mm মিমি (শ্রেণির নাম অতিরিক্ত) কল করতে এবং এই স্থিতিক শ্রেণির পদ্ধতিটি এতে স্থাপন করতে উপযুক্ত বলে মনে করতে পারেন এবং পরিস্থিতি এলে অন্যান্য স্থিতিক শ্রেণীর পদ্ধতি যুক্ত করুন যেখানে এটি কেবলমাত্র C ++ এ করা তা বোধগম্য কারণ কারণ এটি কিছু ক্ষেত্রে কম ঝামেলা। (এমন কেস রয়েছে যেখানে ওবিজেসি কোডের কম লাইনের সাথে কিছু করে, এবং কিছু ক্ষেত্রে সি ++ কোডের কম লাইনের সাহায্যে এটি করে))

পিএস এর সাথে আরও একটি উপায় হ'ল একটি এমএম ফাইল ব্যবহার করা তবে স্ট্যান্ড :: স্ট্রিং এবং স্টাড :: রিজেক্স_রেপ্লেস () (বা রেজিেক্স_ম্যাচ ()) এর চারপাশে একটি উদ্দেশ্য সি মোড়ক তৈরি করা।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.