আমি কীভাবে আরএক্স সহ ডায়নামিক রিজেক্সপ তৈরি করব?


15

আমি rxরানটাইম মান সহ নিয়মিত প্রকাশ করতে ব্যবহার করতে চাই ।

বর্তমানে, আমি এটি করছি:

(setq strings '("foo" "bar" "baz"))
(eval `(rx symbol-start (or ,@strings) symbol-end))

যাইহোক, আমি বরং ব্যবহার এড়াতে চাই eval। আমি খুঁজে পেয়েছি rx-to-string, তবে আমার কী ফর্ম লিখতে হবে তা পরিষ্কার নয়:

;; error: Unknown rx form `symbol-start
(rx-to-string '(symbol-start (or ,@strings) symbol-end))

rxরানটাইমে আমি কীভাবে এক্সপ্রেশন তৈরি করব ?

উত্তর:


18

rx-to-stringএকটি আর্গুমেন্ট হিসাবে একটি regexp ফর্ম গ্রহণ করে। বাক্যবিন্যাসটি তর্ক হিসাবে একই rx

(rx-to-string '(or "foo" "bar"))
"\\(?:\\(?:bar\\|foo\\)\\)"

আপনি যেটি পাস করার চেষ্টা করেছেন তা কোনও রেজিএক্সএক্স ফর্ম নয়, তবে রেজিএক্সপ্যাক্স ফর্মগুলির একটি তালিকা। যেহেতু আপনি যা বলতে চাইছেন তা নিয়মিত এক্সপ্রেশনগুলির ক্রম যা তার symbol-startপরে একগুচ্ছ স্ট্রিং অনুসরণ করে symbol-end, আপনাকে সিকোয়েন্স অপারেটরের সাথে নেতৃত্বদান sequenceকরতে হবে (যা সংক্ষেপে seqবা :, বা অদ্ভুতভাবে এমনকি সংক্ষেপেও ঘটতে পারে and)।

(rx-to-string `(: symbol-start (or ,@strings) symbol-end))
"\\(?:\\_<\\(?:ba[rz]\\|foo\\)\\_>\\)"

rxপ্রকৃতপক্ষে একটি ছোট্ট মোড়কের চারপাশ rx-to-stringযা সংকলন সময়ে পরিচালিত হয় কারণ এটি ম্যাক্রো। এইটিকে বিভ্রান্তিকর করে তোলে তা হ'ল আপনি যদি একাধিক যুক্তি পাস rxকরেন তবে একটি অন্তর্নিহিত sequenceঅপারেটর রয়েছে। এর ডকুমেন্টেশন rxস্পষ্ট করা যেতে পারে।

(rx (: symbol-start (or "foo" "bar" "baz") symbol-end))
"\\_<\\(?:ba[rz]\\|foo\\)\\_>"
(rx symbol-start (or "foo" "bar" "baz") symbol-end)
"\\_<\\(?:ba[rz]\\|foo\\)\\_>"

8
"আপনি আরএক্সে একাধিক যুক্তি পাস করেন, একটি অন্তর্নিহিত সিকোয়েন্স অপারেটর রয়েছে" - আহা! এটাই এখানে মূল গ্যাচা। ধন্যবাদ!
উইলফ্রেড হিউজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.