সি ++: আমার কোন রেজেক্স লাইব্রেরি ব্যবহার করা উচিত? [বন্ধ]


107

আমি একটি বাণিজ্যিক (মুক্ত উত্স নয়) সি ++ প্রকল্পে কাজ করছি যা একটি লিনাক্স-ভিত্তিক সিস্টেমে চলে। আমার সি ++ কোডের মধ্যে কিছু রেইগেক্স করা দরকার। (আমি জানি: আমার এখন 2 টি সমস্যা রয়েছে))

প্রশ্ন: নিয়মিত সি / সি ++ থেকে রেগেক্স করা লোকেরা কি লাইব্রেরিগুলিতে সন্ধান করার পরামর্শ দেয়? একটি দ্রুত অনুসন্ধান নিম্নলিখিত বিষয়গুলি আমার নজরে এনেছে:

1) বুস্ট.আরেজেক্স (আমার বুস্ট সফ্টওয়্যার লাইসেন্স পড়তে হবে, তবে এই প্রশ্নটি সফ্টওয়্যার লাইসেন্স সম্পর্কিত নয়)

2) সি (সি ++ নয়) পসিক্স রেজেেক্স (# অন্তর্ভুক্ত <regex.h>, রেজকম্প, রেজেক্সেক, ইত্যাদি)

3) http://freshmeat.net/projects/cpp_regex/ (আমি এ সম্পর্কে কিছুই জানি না; মনে হয় এটি জিপিএল, সুতরাং এই প্রকল্পে ব্যবহারযোগ্য নয়)


20
যদি কেউ ইঙ্গিতগুলির জন্য এই পুরানো প্রশ্নটির দিকে তাকাচ্ছে ... একটি নতুন গ্রন্থাগার সম্প্রতি দেখা গেছে যা উল্লেখ করা প্রাপ্য: গুগলের RE2: code.google.com/p/re2
স্টাফেন

2
এটি নতুন পিসিআরই 2 (পিসিআরই এর সংশোধিত সংস্করণ) লাইব্রেরির জন্য একটি সি ++ র‌্যাপার।
জাহিদ

উত্তর:


80

বুস্ট.আরেজেক্স খুব ভাল এবং এটি সি ++ 0 এক্স স্ট্যান্ডার্ডের অংশ হয়ে উঠবে (এটি ইতিমধ্যে টিআর 1 এ রয়েছে)।

ব্যক্তিগতভাবে, আমি বুস্ট.এক্সপ্রেসিভের সাথে কাজ করার জন্য অনেক ভাল পাই । এটি কেবলমাত্র একটি শিরোনামের গ্রন্থাগার এবং এটিতে কিছু দুর্দান্ত বৈশিষ্ট্য রয়েছে যেমন স্ট্যাটিক রেজেক্সেস (সংকলনের সময় সংকলিত রেজেক্সেস)।

আপডেট: আপনি যদি সি ++ 11 কমপ্লায়েন্ট কম্পাইলার (জিসিসি 4.8 নন!) ব্যবহার করেন তবে স্টাডি :: রেজেক্স ব্যবহার করুন যদি না আপনার অন্য কিছু ব্যবহার করার উপযুক্ত কারণ থাকে।


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

8
প্রায় 5 বছর পরে, আমি আজ std :: regex ব্যবহার করার চেষ্টা করেছি, তবে দেখা যাচ্ছে এটি এখনও জিসিসিতে কার্যকর করা হয়নি। স্ট্যাকওভারফ্লো.com
স্টাফেন

2
এই বিষয়টির জন্য স্ট্যান্ড :: রেজেক্স বা বুস্ট :: রিজেক্স না ব্যবহার করার ভাল কারণটি হবে যে বুস্ট :: রেইজেক্স, পুনর্গঠনের তুলনায় প্রায় 10 গুণ ধীর
আর্সেন জহরে

3
@jww না, সি ++ স্ট্যান্ডার্ড (সি ++ 03 টিআর, সি ++ 11 এবং সি ++ 1 ই) বেশ কয়েকটি বুস্ট লাইব্রেরিগুলিকে স্ট্যান্ডার্ডের মধ্যে অন্তর্ভুক্ত করার সিদ্ধান্ত নিয়েছে । তার মানে, সমস্ত ব্যবহারিক উদ্দেশ্যে, বুস্ট স্ট্যান্ডার্ড তৈরি করেছে। "সম্ভবত" এর মতো নেজেল শব্দগুলি ব্যবহার করে এবং ব্যক্তিগত আক্রমণগুলি ব্যবহার করে প্রমাণ ছাড়াই জোর দিয়ে দাবি করা, বুস্টের বৃহত অংশগুলি এখন সি ++ হওয়ায় এই সত্যটি পরিবর্তন করতে কিছুই হয় না এবং সি ++ এর আধুনিক দিকনির্দেশক সংখ্যক লোকেরাও উত্সাহদানের জন্য কাজ করছে।
অ্যালিস

3
@ অ্যালিস - সি এবং সি ++ কমিটিগুলি মান তৈরি করে। তারা গ্রন্থাগারগুলি অন্তর্ভুক্ত করে না। আমি তাদের সম্পর্কে কোনও গ্রন্থাগার তৈরি করার বিষয়ে অবগত নই।
jww

22

সমস্ত পরামর্শ জন্য ধন্যবাদ।

আমি আজ কয়েকটি জিনিস চেষ্টা করে দেখেছি এবং যে জিনিসগুলি আমরা করার চেষ্টা করছি তা দিয়ে আমি সবচেয়ে সহজ সমাধানটি বেছে নিয়েছি যেখানে আমাকে অন্য কোনও তৃতীয় পক্ষের লাইব্রেরি ডাউনলোড করতে হবে না। শেষ পর্যন্ত, আমি # অন্তর্ভুক্ত <regex.h> এবং স্ট্যান্ডার্ড সি পসিক্স কলগুলি রেজিকম্প () এবং রেজিেক্সেক () ব্যবহার করেছি। সি ++ নয়, একটি চিমটিতে এটি সবচেয়ে সহজ হিসাবে প্রমাণিত।


19

সি ++ প্রকল্পের অতীতে, আমি ভাল সাফল্যের সাথে পিসিআরই ব্যবহার করেছি । এটি অনেকগুলি সম্পূর্ণ উচ্চ প্রকল্পে ব্যবহৃত হওয়ায় এটি অত্যন্ত সম্পূর্ণ এবং ভালভাবে পরীক্ষিত। এবং আমি দেখতে পাচ্ছি যে গুগল সম্প্রতি পিসিআরআইয়ের জন্য সি ++ র‌্যাপারগুলির একটি সেটও অবদান রেখেছিল।


16

টিআর 1 এর পরে সি ++ এর একটি বিল্টিন রেজেক্স লাইব্রেরি রয়েছে। আফাইক বুস্টের রেজেক্স লাইব্রেরি এর সাথে খুব সামঞ্জস্যপূর্ণ এবং এটি যদি আপনার স্ট্যান্ডার্ড লাইব্রেরি টিআর 1 সরবরাহ না করে তবে প্রতিস্থাপন হিসাবে ব্যবহার করা যেতে পারে।


টিআর 1 কি সংকলক আছে? আমার জি ++ ৪.১.২ (ডিবান ইচ্ছু) এর অনুলিপি # অন্তর্ভুক্ত <রিজেক্স> এর পক্ষে সমর্থন করে না তবে টিআর 1 আমার নজরে আনার জন্য ধন্যবাদ, আমি ভুলে গিয়েছিলাম। টিআর 1 এবং সি ++ 0 এক্স-এ আরও জানতে আগ্রহী অন্যদের জন্য, এন.ইউইকিপিডিয়া.আর.উইকি
স্টাফেন

এসপি 1 এর হিসাবে ভিজ্যুয়াল স্টুডিও ২০০৮-তে রেগেক্স সহ বেশিরভাগ টিআর 1 রয়েছে। আমি জানি এটি লিনাক্সে আপনাকে সহায়তা করে না, তবে অন্যরা আগ্রহী হতে পারে। ডিনকামওয়্যার জিসিসি তে টিআর 1 সমর্থন করে।
মাইকেল বুড়

আমি যেমন লিখেছি, আপনার স্ট্যান্ড লাইব্রেরিতে যদি রেজেক্স না থাকে তবে আপনি বুস্ট ব্যবহার করতে পারেন: boost.org/doc/libs/1_36_0/doc/html/boost_tr1/…
ক্যাসপ্রজল

3
g ++ 4.5.0। টিআর 1 টিআর 1 / রেজেক্সে থাকে। উদাহরণস্বরূপ: # অন্তর্ভুক্ত <tr1 / regex>
ওগ্রে গীতসংহিতা 33

11

আরও দুটি বিকল্প:

আপনি যদি এটি সি ++ 11 তে লিখতে পারেন - টিউটোরিয়ালটি করুন: http://www.codeguru.com/cpp/cpp/cpp_mfc/stl/article.php/c15339

দ্রষ্টব্য: আমি জানি যে কেবলমাত্র সি ++ 11 রেগেক্স লাইব্রেরিটি লেখার সময় সেই ঝাঁকুনি / এলএলভিএম একটি , এবং কেবল ম্যাকের জন্য কাজ করে। GNU এখনও রেগেক্স প্রয়োগ করে না । আমি ভিজ্যুয়াল স্টুডিও সম্পর্কে জানি না। বেশিরভাগ লোক এখনও বুস্ট রেজেক্স বাস্তবায়ন ব্যবহার করে ।


অথবা আপনি আপনার জন্য পার্সিং করার জন্য একটি সসীম স্টেট মেশিন জেনারেট করতে রাগেল ব্যবহার করতে পারেন , এবং সি / সি ++ কোড বাস্তবায়ন জেনারেট করতে পারেন: http://www.complang.org/ragel/

আমি জসনকে পার্স করতে কোড উত্পন্ন করতে এটি কিছুটা ব্যবহার করেছি। এই রাগেল ফাইল: https://github.com/matiu2/yajp/blob/master/parser/number.rl এই কোডটি উত্পন্ন করতে ব্যবহৃত হয় https://github.com/matiu2/yajp/blob/master/parser/json .hpp # L254 এবং এই সীমাবদ্ধ রাষ্ট্র মেশিন ডায়াগ্রাম:

রাষ্ট্র চিত্রটি


আপডেট 1:

lvm এর libc ++ regex উবুন্টু 14.04 এ কাজ করে: libc ++ - dev - LLVM C ++ স্ট্যান্ডার্ড লাইব্রেরি (উন্নয়ন ফাইল)। সংকলন করার সময়:clang++ -std=c++11 -lc++ -I/usr/include/c++/v1 ...

আপডেট 2:

আমি বর্তমানে ব্রেস্ট স্পিরিটি 3 উপভোগ করছি - আমি এটি রেগেক্সের চেয়ে বেশি পছন্দ করি কারণ এটিতে বিএনএফ স্টাইলের নিয়ম রয়েছে এবং এটি ভালভাবে বিবেচনা করা হয়েছে। (আরও পুরানো (আরও নথিভুক্ত) স্পিরিট কিউ লিবস এখানে পাওয়া গেছে )



7

বিপুল পরিমাণে ডেটার বিপরীতে হাজার হাজার নিদর্শনগুলির দ্রুত ম্যাচগুলি করার জন্য ইয়ানডেক্স অনুসন্ধান ইঞ্জিনে তৈরি করা দ্রুত রেজেক্স লাইব্রেরিটিও দেখতে পারেন ।


6

আমি ব্যক্তিগতভাবে সর্বদা বুস্ট.রেজেক্স ব্যবহার করেছি (যদিও আমার সি ++ তে রেজেক্সের খুব বেশি প্রয়োজন নেই)। মাইক্রোসফ্ট ল্যাবগুলির একটি রেইজেক্স গ্রন্থাগারও রয়েছে, এটি জিআরইটিএ: http://research.microsoft.com/projects/greta/ নামে পরিচিত । স্পষ্টতই এটি খুব দ্রুত এবং পুরো পার্ল 5 সিনট্যাক্সের বৈশিষ্ট্য রয়েছে। আমি এটি ব্যবহার করি নি তবে আপনি এটি পরীক্ষা করে দেখতে চাইতে পারেন।


8
GRETA ( গবেষণার জন্য.মাইক্রোসফট /en-us/downloads/…) এরিক নিবলার যখন তিনি মাইক্রোসফ্টে কাজ করেছিলেন (1998-2001 GRETA- র হেডার ফাইলগুলি থেকে) তৈরি করেছিলেন। এরিক নিবলার তারপরে 2007 বুস্ট.এক্সপ্রেসিভ। লোকেদের বুস্ট.এক্সপ্রেসিভ ব্যবহার করা উচিত কারণ এটি নতুন এবং "মাইক্রোসফ্ট রিসার্চ শেষ ব্যবহারকারী লাইসেন্স চুক্তি" এর চেয়েও ভাল লাইসেন্স রয়েছে
ক্রিশ্চিয়ান অ্যাডাম

1
দুঃখিত, আমি বুঝতে পারি না বুস্ট লাইব্রেরিতে কীভাবে টানা ভাল জিনিস। শেষবার যখন আমি স্থানীয় ডাউনলোডের বিরাম ঘটাবার সংস্করণটি পরীক্ষা করেছি 400 ম্যাগ me আপনি উত্সাহ সঙ্গে পেতে inain টেম্পলেট পাগলামি উল্লেখ না। দুঃখিত, আমি গ্রেগস উত্তর প্রস্তাব।
চাদ


@ চ্যাড কারণ বুস্ট হ'ল স্ট্যান্ডার্ড লাইব্রেরিগুলির একটি সুপরিচিত এবং সম্মানিত সেট যা বিভিন্ন পরিস্থিতিতে সহায়ক? ডাউনলোডের আকারটি যদি আপনার পক্ষে খুব বড় হয় তবে আপনার প্রয়োজন হয় না এমন কিছু কেটে ফেলার জন্য কেবল বিসিডি ব্যবহার করুন; এই পদ্ধতিতে ছিটকে গেলে boost.regex বেশ ছোট।
অ্যালিস


1

নূন এখানে সি ++ 0x এর সাথে আসা সম্পর্কে কিছু বলেনি। আপনি যদি একটি সংকলক এবং এসটিএল ব্যবহার করেন যা সি ++ 0x সমর্থন করে আপনি কেবল আপনার প্রকল্পে অন্য কোনও লিবি না থাকার পরিবর্তে এটি ব্যবহার করতে পারেন।


1
আপনি যদি সর্বাধিক ভোট প্রাপ্ত উত্তরটি দেখে থাকেন (2+ বছর আগে থেকে), এটির উল্লেখ রয়েছে।
মতিন উলহাক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.