কেন রেজেক্স বিল্ডারের সাথে তৈরি নিয়মিত প্রকাশগুলি সিনট্যাক্স ইন্টারেক্টিভ নিয়মিত এক্সপ্রেশন থেকে আলাদা হয়?


26

সুতরাং, নিয়মিত এক্সপ্রেশন বিল্ডার (এমএক্স পুনঃ-বিল্ডার) ব্যবহার করে in এর মধ্যে শেষ হওয়া লাইনগুলি "\\ $" লাগবে, যখন অনুসন্ধানে এবং রেগেক্স দ্বারা প্রতিস্থাপন করা হবে, এটি কেবল "\ $" লাগে। আমি প্রত্যাশা করতাম যে রেজেক্স বিল্ডার সরাসরি ব্যবহারযোগ্য এক্সপ্রেশন তৈরি করতে পারবেন, তবে এই পার্থক্যের জন্য কী কী?


6
এটি কোডে সরাসরি ব্যবহারের জন্য এক্সপ্রেশন তৈরি করে।
আবো-আবো 21

1
@ আবো-আবো এটিই আমি উত্তরটি খুঁজছিলাম, আমি বুঝতে পারি নি যে কোডে ব্যবহারযোগ্য এবং ইউআইতে ব্যবহারযোগ্য কিসের মধ্যে পার্থক্য রয়েছে। এটিকে পাল্টা স্বজ্ঞাত মনে হয় যে পুনর্নির্মাণকারী কোড সিনট্যাক্স ব্যবহার করে এবং ম্যানুয়ালটি বলে না, তবে এটি পার্থক্যের ব্যাখ্যা দেয়।
ব্যবহারকারী2699

2
ইন্টারেক্টিভ অনুসন্ধানগুলি রচনা করার জন্য রেইগেক্স বিল্ডারকে আরও দরকারী করার জন্য, রেবিল্ডার ইমাস উইকি পৃষ্ঠা , বিশেষত reb-query-replaceফাংশন সংজ্ঞাটি একবার দেখুন।
dfeich

উত্তর:


29

এখানে চারটি পৃথক re-builderসিনট্যাক্স বিকল্প রয়েছে এবং আপনি এগুলির মধ্যে স্যুইচ করতে পারেনC-cTAB

দুটি হ'ল সেক্সপ-ফর্ম রিজেক্সপ সংকলকগুলির জন্য rxএবং sregex(তবে প্রাক্তনটি আরও বিস্তৃত এবং প্রায় সম্পূর্ণ সিনট্যাক্স-সামঞ্জস্যপূর্ণ, আপনি যদি ব্যবহার না করা পুরানো কোডের সাথে কাজ না করে থাকেন তবে আপনি সত্যই স্ট্রেজেক্সটিকে উপেক্ষা করতে পারবেন)।

অন্য দুটি সিনট্যাক্স বিকল্প হ'ল ( readডিফল্ট) এবং string(যা সিন্টেক্সটি আপনি ইন্টারেক্টিভভাবে ব্যবহার করেন)।

readযেমন জলের কলকল শব্দ পাঠক কর্তৃক স্বীকৃত অর্থাত - - সিনট্যাক্স 'কোড' সিনট্যাক্স যা আপনি অনুযায়ী regexp প্রবেশ স্ট্রিং জন্য পঠিত সিনট্যাক্স :

C-hig (elisp) Syntax for Strings RET

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

আপনি যদি ডিফল্টরূপে স্ট্রিং সিনট্যাক্স ব্যবহার করতে চান তবে নিম্নলিখিতটি আপনার ডিআইডি ফাইলে যুক্ত করুন বা ব্যবহার করুন M-x customize-option RET reb-re-syntax RET

(setq reb-re-syntax 'string)

দ্রষ্টব্য যে আপনি কোনও ক্ষতি ছাড়াই রেজিএক্সপ্যাক সম্পাদনা করার সময় পঠন এবং স্ট্রিং সিনট্যাক্সের মধ্যে পিছনে স্যুইচ করতে পারেন। এছাড়াও আপনি সুইচ করতে পারেন থেকে পড়তে / পংক্তি সিনট্যাক্স sexp ফরম (স্বাভাবিকভাবেই; স্ট্রিং sexps সংকলন কি সেই লাইব্রেরির জন্য হয়), কিন্তু আপনি অন্য দিক না যান এবং একটি স্ট্রিং থেকে একটি sexp তৈরি করতে পারেন। পুনর্নির্মাণকারী মনে রাখে যে সেক্সপটি কী ছিল, তাই আপনি সিনট্যাক্স পরিবর্তন করার সময় আপনি সেই ফর্মটি হারাবেন না ; তবে আপনি যদি আলাদা সিনট্যাক্সে রেজিপ্সকে পরিবর্তন করেন এবং তারপরে ফিরে যান তবে তা আপডেট হয় না। সংক্ষেপে, আপনি যদি একটি সেক্সপ হিসাবে রেজিপ এক্সটি তৈরি করে থাকেন তবে নিশ্চিত হন যে এই সিনট্যাক্সটি ব্যবহার করার সময় আপনি কেবল এটি সম্পাদনা করেছেন


rxসমর্থন সহ একটি গেটচা এটি প্রকৃতপক্ষে rx-to-stringফাংশনটি ব্যবহার করছে যা rxকোডটিতে ম্যাক্রো ব্যবহার করার মতো নয় । rxএকটি স্বতন্ত্র সংখ্যক ফর্ম আর্গুমেন্ট গ্রহণ করে এবং তাদেরকে একটি অন্তর্নিহিত অনুক্রম হিসাবে গণ্য করে , যেখানে rx-to-stringকেবলমাত্র একটি একক রূপ গ্রহণ করে এবং যে কোনও শীর্ষ স্তরের ক্রমটি অবশ্যই সুস্পষ্ট '(sequence ...)বা সমতুল্য হওয়া উচিত ।

সংক্ষেপে, আপনি যখন '(...)পুনর্নির্মাণকারীতে কোনও ফর্ম প্রবেশ করেন, তখন এটি প্রক্রিয়াজাত হয় (rx-to-string '(...))এবং না(rx ...)

এছাড়াও খেয়াল রাখবেন যে কোনও অবৈধ ফর্মের কারণে re-builderফর্মটি আবার বৈধ হয়ে যাওয়ার পরেও সম্পর্কিত বাফারে ম্যাচগুলি গতিশীলভাবে আপডেট করা বন্ধ করতে পারে । C-cC-uবাঁধাই জন্য reb-force-updateএই পরিস্থিতিতে নিরসনের জন্য দরকারী।


ডিফল্টরূপে মোড লাইন শো "পুনরায় নির্মাতা" যখন ব্যবহার readবা stringবাক্য গঠন, এবং "পুনরায় নির্মাতা পাতার মর্মর" যখন ব্যবহার rxবা sregexবাক্য গঠন, কিন্তু এটা অনেক বেশী শনাক্ত করার দরকারী বলে মনে হয় নির্দিষ্ট ব্যবহারে সিনট্যাক্স (বিশেষত মধ্যে পার্থক্য করতে readএবং string)।

আপনি যদি delightGNU ELPA থেকে প্যাকেজটি ইনস্টল করেন , আপনি মোড লাইনে একটি সিনট্যাক্স সূচক যুক্ত করতে নিম্নলিখিতটি ব্যবহার করতে পারেন।

(let ((name '("Regexp[" (:eval (symbol-name reb-re-syntax)) "]")))
  (delight `((reb-mode ,name :major)
             (reb-lisp-mode ,name :major))))

এটি মোডের নামটিকে readসিনট্যাক্সে "রেজিএক্সপেক্স [পড়ুন]" এবং অন্যদের জন্য একইভাবে পরিবর্তন করে।

বা জন্য একটি ইঙ্গিত অন্তর্ভুক্ত rxrx-to-string উপরে বর্ণিত বনাম গোটার করতে, rxসিনট্যাক্সটি ব্যবহার করার সময় মোড লাইনটিকে "রেজিপ্সপ [আরএক্স-টু-স্ট্রিং]" বলুন :

(let ((name '("Regexp["
              (:eval (symbol-name (if (eq reb-re-syntax 'rx)
                                      'rx-to-string
                                    reb-re-syntax)))
              "]")))
  (delight `((reb-mode ,name :major)
             (reb-lisp-mode ,name :major))))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.