আপনি কিভাবে একটি রেইগেক্স ডিবাগ করবেন? [বন্ধ]


149

নিয়মিত প্রকাশগুলি বেশ জটিল হয়ে উঠতে পারে। সাদা জায়গার অভাব তাদের পড়তে অসুবিধে করে। আমি কোনও ডিবাগারের সাথে নিয়মিত প্রকাশের পরেও পদক্ষেপ করতে পারি না। তাহলে বিশেষজ্ঞরা কীভাবে জটিল নিয়মিত ভাব প্রকাশ করবেন?


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

7
এটি আকর্ষণীয় বলে মনে হচ্ছে: http://www.debuggex.com/ (যেহেতু প্রশ্নটি বন্ধ রয়েছে তাই আমি একটি সত্য উত্তর দিতে পারি না))
কাজম্যাগনুস

আপনার যদি ভিজ্যুয়াল স্টুডিও রয়েছে, আপনি আপনার সমস্যার ক্ষেত্রের কাছাকাছি একটি ব্রেকপয়েন্ট নির্ধারণ করতে পারেন (উদাহরণস্বরূপ RegEx.Replace(...), 'তাত্ক্ষণিক 'Regex.IsMatch(yourDebugInputString, yourDebugInputRegEx)
উইন্ডো'

2
আমি খুব আশ্চর্য হয়েছি কেউ রিজেক্স ১০০.কমের উল্লেখ করেছে বলে মনে হয় না যার আসল ডিবাগার রয়েছে এবং এটি ওয়েব-হোস্ট করাও রয়েছে।
mechalynx

1
এমনকি 2017 সালে, আমি বিশ্বাস করি যে রেগেক্সবাডি এখনও সন্ধানের সেরা সরঞ্জাম এবং দাম 40 ডলারে থেকে যায়। আমি প্রায়শই বিভিন্ন ভাষায় বিভিন্ন রেগেক্স গন্ধ সহ কাজ করি, তাই আমি প্রায়শই বিভ্রান্ত হয়ে পড়ি। রিজেক্সবুদ্ধির সাথে, এটি আমাকে বাক্য
বাক্যটি

উত্তর:


68

আপনি রেজেক্সবাডি কিনে এর বিল্ট ইন ডিবাগ বৈশিষ্ট্যটি ব্যবহার করুন । আপনি যদি বছরের মধ্যে দু'বারের বেশি রেজিজেস নিয়ে কাজ করেন তবে আপনি এই অর্থটি সময়মতো পুনরুদ্ধার করবেন no RegexBuddy আপনাকে সহজ এবং জটিল নিয়মিত প্রকাশ করতে এবং এমনকি বিভিন্ন ভাষায় আপনার জন্য কোড তৈরি করতে সহায়তা করবে।

বিকল্প পাঠ

এছাড়াও, বিকাশকারীদের মতে, WINE এর সাথে ব্যবহার করার সময় এই সরঞ্জামটি প্রায় নির্দোষভাবে লিনাক্সে চলে


31
খুব খারাপ এটি শুধুমাত্র উইন্ডোজ এবং এর দাম 40 মার্কিন ডলার।
কেনেটিএম

25
এটি লিনাক্সে WINE এর মাধ্যমে চলে, বিকাশকারী অনুসারে: regexbuddy.com/wine.html । এবং 40 ডলার ব্যয় সম্পর্কে ... আপনার সময়ের মূল্য কত?
মিক

18
এটি ফ্রি সফটওয়্যার নয়।
কোডহলিক

38
কে বলেছে এটি ছিল নাকি এর জন্য জিজ্ঞাসা করা হয়েছিল?
টিম পিটজ্যাকার

21
ঠিক আছে, মিক যেমন বলেছেন, আপনার সময়ের মূল্য কত? "সর্বোত্তম সরঞ্জামগুলির অর্থ কিনতে পারে" সর্বদা অর্থের প্রয়োজন হয় না, তবে কখনও কখনও তারা তা করে। প্লাস, জে জি সোফট ধারাবাহিকভাবে ব্যতিক্রমী ব্যবহারকারীর পরিষেবা সহ দুর্দান্ত মানের পণ্য বিকাশ করে । এমনকি আমি তাদের কাছ থেকে আমার কাছে সত্যিকারের দরকার নেই এমন সফ্টওয়্যারও কিনেছি (রেগেক্স ম্যাজিকের মতো) কারণ আমি তাদের সমর্থন করতে এবং তাদের ব্যবসায় রাখতে চাই। আপনি কী মিস করছেন তা আপনি জানেন না। সিরিয়াসলি।
টিম পিটজেকার

52

পার্ল সাথে 5.10 use re 'debug';,। (বা debugcolor, তবে স্ট্যাক ওভারফ্লোতে আমি আউটপুটটি সঠিকভাবে ফর্ম্যাট করতে পারি না))

l perl -Mre = debug -e '"foobar" = ~ / (।) \ 1 /'
সংকলন রেক্স "(।) \ 1"
চূড়ান্ত প্রোগ্রাম:
   1: ওপেন 1 (3)
   3: REG_ANY (4)
   4: ক্লোজ 1 (6)
   6: আরএফএফ 1 (8)
   8: শেষ (0)
মিনল ঘ
"ফুবার" এর বিপরীতে "(।) \ 1" এর সাথে মিলছে
   0 <> <ফুবার> | 1: OPEN1 (3)
   0 <> <ফুবার> | 3: REG_ANY (4)
   1 <f> <ooبار> | 4: CLOSE1 (6)
   1 <f> <ooبار> | 6: REF1 (8)
                                  ব্যর্থ হয়েছে...
   1 <f> <ooبار> | 1: OPEN1 (3)
   1 <f> <ooبار> | 3: REG_ANY (4)
   2 <fo> <ob>> | 4: CLOSE1 (6)
   2 <fo> <ob>> | 6: REF1 (8)
   3 <foo> <বার> | 8: END টি (0)
ম্যাচ সফল!
নিখরচায় রেক্স: "(।) \ 1"

এছাড়াও, আপনি আরও বেশি পঠনযোগ্য করে তুলতে আপনি রেগেক্সগুলিতে সাদা স্থান এবং মন্তব্য যুক্ত করতে পারেন । পার্লে, এটি /xমডিফায়ার দিয়ে করা হয় । সঙ্গে pcre, PCRE_EXTENDEDপতাকা আছে।

"foobar" =~ /
    (.)  # any character, followed by a
    \1   # repeat of previously matched character
/x;

pcre *pat = pcre_compile("(.)  # any character, followed by a\n"
                         "\\1  # repeat of previously matched character\n",
                         PCRE_EXTENDED,
                         ...);
pcre_exec(pat, NULL, "foobar", ...);

12
+1: কেন কেউ এর চেয়ে রেগেক্সবাডি পছন্দ করবেন?
চার্লস স্টুয়ার্ট

1
আমি এই পদ্ধতিটি পছন্দ করি, যদিও আমি মনে করি রেগেক্স বন্ধুটি আরও ভাল।
রোক

প্রতিধ্বনি "ফুবার" | egrep "(।) \ 1"
দিমিত্রিসান্ডালভ

30

আমি অন্য একটি যুক্ত করব যাতে আমি এটি ভুলে যাব না: ডিবাগেক্স

এটি খুব ভাল কারণ এটি খুব চাক্ষুষ: ডিবাগেক্সেক্স রেজেক্স সহায়কের ছবি


ডিবাগেক্স আসলে আমার পক্ষে কাজ করে না: ফন্টগুলি জাভাস্ক্রিপ্ট দ্বারা প্রয়োগ করা হয়, স্পষ্টতই, এবং কাজ করতে ব্যর্থ হয় (আমার মনসপাসেড ফন্ট রয়েছে, ফায়ারফক্স কনসোল সেগুলি পুরোপুরি ব্যবহার করে)। ফলস্বরূপ প্রদর্শনটি ব্যবহারযোগ্য নয়। এছাড়াও, জাভাস্ক্রিপ্ট টেস্টিং প্রতিটি সংস্করণের জন্য (কেবল একবার বরখাস্ত করার সময় নয়) প্রচুর পরীক্ষার ক্ষেত্রে ব্রাউজারকে স্তব্ধ করে দেয়। অবশেষে, প্রস্তাবিত কিছু রেজেক্সগুলি বাগড হয়েছে এবং ইচ্ছামত মেলে না।
7heo.tk

28

যখন আমি একটি রেজেেক্সে আটকে যাই তখন আমি সাধারণত এটিতে ফিরে যাই: https://regexr.com/

কিছু ভুল হচ্ছে যেখানে দ্রুত পরীক্ষা করার জন্য এটি নিখুঁত।


1
এই সরঞ্জামটি সত্যিই দরকারী: এটি ওয়েব হোস্টেড তাই কোনও ইনস্টল নেই, এটি সত্যিকারের সময় তাই ডিবাগিং একটি স্বপ্ন, এবং এটিতে দরকারী সরঞ্জামদণ্ড এবং বিশেষ অক্ষরের একটি তালিকা রয়েছে, যদি আপনি কিছু মনে করতে না পারেন তবে। এটি নিখুঁত, অনেক ধন্যবাদ
জেসন রিজ

দুর্ভাগ্যক্রমে, এই সরঞ্জামটি (এখনও) আপনাকে রেজেক্স ডিলিমিটারগুলি (এমনকি পিসিআরই ইঞ্জিনের জন্যও) পরিবর্তন করতে দেয় না - সেগুলি /(স্ল্যাশ) হিসাবে স্থির করা হয়েছে । এটি আমার জন্য শোস্টোপার।
মিঃ হোয়াইট

19

আমি কোডস ব্যবহার করি - পাইথন নিয়মিত এক্সপ্রেশন ডিবাগার:

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

(...)

বিকল্প পাঠ

লিনাক্স, ইউনিক্স, উইন্ডোজ, ম্যাকে চলছে।


2
কোডস সত্যিকারের ডিবাগিং বৈশিষ্ট্যগুলি সরবরাহ করে না। আপনি রেজেক্সকে পদক্ষেপ নিতে পারবেন না বা কার্যকর করতে বিরতি দিতে পারবেন না।
ক্যান্ডাইড

এটি কোনও ম্যাকের সাথে কাজ করার কোনও পরামর্শ? সোর্সফোজের সাইটটি ম্যাকের জন্য ইনস্টল করার কোনও তথ্য সরবরাহ করে না, এবং আমার গুগল-ফু আমার ব্যর্থ হতে পারে বলে মনে হচ্ছে।
আদম পার্কিন

যদিও এটি পাইথন 2 বলে মনে হয়, এবং 2006 সাল থেকে (14 বছর আগে লেখার সময়) আপডেট হয়নি?
মিঃ হোয়াইট

13

আমি মনে করি তারা না। যদি আপনার রেজিপেক্সটি খুব জটিল এবং আপনার কোনও ডিবাগারের প্রয়োজনের সমস্যা হয় তবে আপনার নির্দিষ্ট পার্সার তৈরি করা উচিত, বা অন্য কোনও পদ্ধতি ব্যবহার করা উচিত। এটি অনেক বেশি পাঠযোগ্য এবং রক্ষণাবেক্ষণযোগ্য হবে।


4
বাবু, আপনি রেগেক্সবাডি স্ক্রিন শট দেখে এই পোস্ট করেছেন?
রুক

2
প্রত্যেকেই এর সাথে একমত হবে না, তবে এটি কোনও খারাপ ধারণা নয়। প্রত্যেকেই ধরে নিয়েছে যে রেগেক্স ইঞ্জিন প্রচুর রেগেক্সগুলির সাথে সবচেয়ে দক্ষ। এটি অগত্যা সত্য নয় এবং এগুলি অবশ্যই পড়া সহজ নয়। আপনার regexes আপ ভাঙ্গা।
ড্যান রোজনস্টার্ক

1
@ মিশেল ব্রুকস: না, এর আগে আসলে। স্ক্রিনশটটি দেখে, আপনি যে রেজিএক্সপিকে ডিবাগ করতে পারবেন তার সাথে আমি ঠিক আছি। তবে আমি আমার ধারণার উপরে দাঁড়িয়ে আছি: যখন একটি রেজিপেক্স খুব জটিল হয়ে যায়, তখন অন্য উপায়ে পরিবর্তনের সময় এসেছে।
ভ্যালেন্টিন রচার

12

একটি দুর্দান্ত নিখরচায় সরঞ্জাম রয়েছে, রেজেক্স কোচ । সর্বশেষতম সংস্করণটি কেবল উইন্ডোজের জন্য উপলব্ধ; এর লেখক ড। এডমন্ড ওয়েটজ লিনাক্স সংস্করণ বজায় রাখা বন্ধ করেছিলেন কারণ খুব কম লোকই এটি ডাউনলোড করেছে, তবে ডাউনলোড পৃষ্ঠায় লিনাক্সের জন্য একটি পুরানো সংস্করণ রয়েছে।


8

আমি সবেমাত্র রেজিএক্সএক্স :: ডিবাগার এর নির্মাতা দ্বারা একটি উপস্থাপনা দেখেছি: ড্যামিয়ান কনওয়ে। খুব চিত্তাকর্ষক স্টাফ: অন্তর্নিহিতভাবে চালানো বা কমান্ড লাইন সরঞ্জাম (আরএক্সআরএক্স) ব্যবহার করে, ইন্টারেক্টিভভাবে বা একটি "লগড" এক্সিকিউশন ফাইল (জেএসএন-এ সঞ্চিত) ব্যবহার করে, যেকোন পর্যায়ে এগিয়ে এবং পিছনে, ব্রেকপয়েন্ট বা ইভেন্টগুলিতে থামানো, রঙিন আউটপুট (ব্যবহারকারী কনফিগারযোগ্য ), রিজেক্সেপে তাপের মানচিত্র এবং অপ্টিমাইজেশনের জন্য স্ট্রিং ইত্যাদি ...

: জন্য বিনামূল্যে CPAN এ উপলব্ধ http://search.cpan.org/~dconway/Regexp-Debugger/lib/Regexp/Debugger.pm


ওপি বলেছিলেন "আমি কোনও ডিবাগারের সাথে নিয়মিত প্রকাশের পরে পদক্ষেপ নিতে পারি না" "
কোয়ান্টাম

আপনার উপস্থাপনাটির কোনও লিঙ্ক আছে?
রোক

3
@ রুক, আপনি উপস্থাপনাটি youtube.com/watch?v=zcSFIUiMgAs
স্টারফিশ


6

আমি আমার নিজের চোখ দিয়ে আমার রেজিক্সগুলি ডিবাগ করি। এজন্য আমি /xসংশোধক ব্যবহার করি , তাদের জন্য মন্তব্য লিখি এবং সেগুলিকে কিছু অংশে বিভক্ত করি। দ্রুত এবং পঠনযোগ্য নিয়মিত এক্সপ্রেশন কীভাবে বিকাশ করতে হয় তা শিখতে জেফ্রি ফ্রেডের মাস্টারিং নিয়মিত এক্সপ্রেশনগুলি পড়ুন । বিভিন্ন রেজেক্স ডিবাগিং সরঞ্জাম কেবল ভুডু প্রোগ্রামিংকে উস্কে দেয়।


5

আমার হিসাবে আমি সাধারণত প্যাক্রেস্টেস্ট ইউটিলিটি ব্যবহার করি যা কোনও রেইগেক্সের বাইট কোডটি ডাম্প করতে পারে এবং সাধারণত এটি পড়তে আরও সহজ হয় (আমার পক্ষে কমপক্ষে)। উদাহরণ:

PCRE version 8.30-PT1 2012-01-01

  re> /ab|c[de]/iB
------------------------------------------------------------------
  0   7 Bra
  3  /i ab
  7  38 Alt
 10  /i c
 12     [DEde]
 45  45 Ket
 48     End
------------------------------------------------------------------



3

আপনি যদি একজন ম্যাক ব্যবহারকারী হন তবে আমি কেবল এটির সামনে এসেছি:

http://atastypixel.com/blog/reginald-regex-explorer/

এটি নিখরচায় এবং সহজেই ব্যবহার করা সহজ এবং সাধারণভাবে RegEx গুলোকে আঁকড়ে ধরতে আমার পক্ষে এক বড় সহায়তা হয়ে গেছে।



2

পিসিআরই-এর মতো একটি স্বরলিপি ব্যবহার করে রেজিস্ট এক্সিজ লেখার কাজ এসেম্বেবলার লেখার মতো: আপনি যদি ঠিক নিজের মাথায় সংশ্লিষ্ট সীমাবদ্ধ রাষ্ট্র অটোম্যাটাকে দেখতে পান তবে এটি খুব দ্রুত বজায় রাখা কঠিন হয়ে উঠতে পারে it's

ডিবাগারটি ব্যবহার না করার কারণগুলি প্রোগ্রামিং ভাষার সাথে কোনও ডিবাগার ব্যবহার না করার মতোই: আপনি স্থানীয় ভুলগুলি ঠিক করতে পারেন, তবে তারা আপনাকে সেই ডিজাইন সমস্যার সমাধান করতে সহায়তা করবে না যা আপনাকে প্রথমে স্থানীয় ভুলগুলি করতে পরিচালিত করেছিল জায়গা।

আরও প্রতিবিম্বিত উপায় হ'ল আপনার প্রোগ্রামিং ভাষায় রিজেক্সপগুলি উত্পন্ন করতে ডেটা উপস্থাপনাগুলি ব্যবহার করা এবং সেগুলি তৈরির জন্য উপযুক্ত বিমূর্ততা থাকা। অলিন শিভারের তাঁর স্কিমের রিজএক্সপ্যাকস শিরোনামের সাথে পরিচয় করিয়ে এই ডেটা উপস্থাপনার নকশা তৈরি করতে সমস্যাগুলির একটি দুর্দান্ত সংক্ষিপ্ত বিবরণ দেয়।


পার্সার কম্বিনেটরগুলি প্রকৃতপক্ষে যাওয়ার এক দুর্দান্ত উপায়: পার্সেক এবং হাসকেলের প্যারোস, রুবিতে আরএসেক, সি ++ তে বুস্ট স্পিরিট, পাইল পার্টে পার্ল :: :: পার্লের বিধি ইত্যাদি
27:41 এ 20:41-

2

আমি প্রায়শই প্যাক্রেস্ট ব্যবহার করি - খুব কমই একটি "ডিবাগার" তবে এটি কেবল একটি পাঠ্য-এসএসএইচ সংযোগের উপর কাজ করে এবং ঠিক আমার যে রেইগেক্স ডায়ালকটি প্রয়োজন তা পার্স করে: আমার (সি ++) লিপ্পক্রিতে কোড লিঙ্ক, সুতরাং যাদু কী এবং কী কী ক্ষেত্রে সূক্ষ্ম পার্থক্য নিয়ে কোনও অসুবিধা নেই না, ইত্যাদি

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





0

আমার জন্য, রেজেক্সকে চোখের পাতলা করার পরে (যেমন আমি প্রায় সাবলীল, এবং প্রায়শই ব্যবহার করি / এক্স বা সমতুল্য), আমি পরীক্ষার চেয়ে ডিবাগ করতে পারি যদি আমি কিছুটা ডিজেনরেটেড ম্যাচটি (যেমন অত্যধিক ব্যাকট্র্যাকস এমন কিছু করে) আঘাত করি তবে আমি নিশ্চিত নই কিনা উদাহরণস্বরূপ আমি কোনও অপারেটরের লোভকে সংশোধন করে এই জাতীয় সমস্যাগুলি সমাধান করতে পারি কিনা তা দেখার জন্য।

এটি করার জন্য, আমি উপরে উল্লিখিত পদ্ধতিগুলির মধ্যে একটি ব্যবহার করব: প্রেক্রেস্ট, রেজেক্সবাডি (যদি আমার বর্তমান কর্মক্ষেত্রটি এটি লাইসেন্স করে থাকে) বা অনুরূপ, এবং মাঝে মাঝে আমি লিনকপ্যাডে সময় বের করি যদি আমি সি # রেজেক্সে কাজ করছি।

(পার্ল ট্রিকটি আমার জন্য একটি নতুন, তাই সম্ভবত এটি আমার রেজেক্স সরঞ্জাম সরঞ্জামকেও যোগ করবে))

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