স্ট্রিংকে নিয়মিত এক্সপ্রেশন রুবিতে রূপান্তর করুন


118

আমাকে "/ [\ w \ s] + /" এর মতো স্ট্রিংগুলি নিয়মিত অভিব্যক্তিতে রূপান্তর করতে হবে।

"/[\w\s]+/" => /[\w\s]+/

আমি বিভিন্ন Regexpপদ্ধতি ব্যবহার করার চেষ্টা করেছি যেমন:

Regexp.new("/[\w\s]+/") => /\/[w ]+\//, একইভাবে Regexp.compileএবং Regexp.escape। তবে তাদের কেউই প্রত্যাশা মতো ফিরে আসেনি।

আরও আমি ব্যাকস্ল্যাশগুলি সরানোর চেষ্টা করেছি:

Regexp.new("[\w\s]+") => /[w ]+/ তবে ভাগ্য নেই।

তারপরে আমি এটিকে সহজ করার চেষ্টা করেছি:

str = "[\w\s]+"
=> "[w ]+"

এটি পালিয়ে যায়। এখন স্ট্রিংটি যেমন আছে তেমন থেকে কীভাবে একটি রেজিপ্সপ অবজেক্টে রূপান্তর করতে পারে?

উত্তর:



137

স্পষ্ট করা

  /#{Regexp.quote(your_string_variable)}/

খুব কাজ করছে

সম্পাদনা করুন: নির্ভুলতার জন্য, আপনার_সারা_ভরিয়ালিটি রেজিপ্যাক্স.কোয়টে মোড়ানো।


3
সবেমাত্র পাওয়া গেছে যে আপনি যেমন বিকল্পগুলি যুক্ত করতে পারবেন না/#{your_regex}/#{options}
pduersteler

আমি মনে করি আপনি পিল সম্পর্কে কথা বলছেন? optionsহ্যাশ, এবং রুবি খুব গতিশীল নয় =)
সের্গেই গেরাসিমভ

2
এটি রুবি ২.১-তে ওপি যা জিজ্ঞাসা করছে তা করে না, এটি "[\ w \ s] +" => / [ডব্লিউ] + /
লুকা স্পিলার

1
দয়া করে নোট করুন যে উত্তরটি ২০১২ বছরে দেওয়া হয়েছিল :) সেই সময় সবকিছুই নিখুঁত ছিল
সের্গেই গেরাসিমভ

4
এটি একটি নিখুঁত বছর ছিল।
নাফটুলি কে

35

এই পদ্ধতিটি বিশেষ অক্ষর সহ সমস্ত অক্ষরকে নিরাপদে রক্ষা করবে:

/#{Regexp.quote(your_string)}/

উদাহরণস্বরূপ, .পালানো হবে, যেহেতু এটি অন্যথায় 'কোনও চরিত্র' হিসাবে ব্যাখ্যা করা হয়।

আপনি যদি নিয়মিত স্ট্রিং ইন্টারপোলেশনটি কিক করতে না চান তবে একক-উদ্ধৃত স্ট্রিংটি ব্যবহার করতে ভুলবেন না, যেখানে ব্যাকস্ল্যাশের একটি বিশেষ অর্থ রয়েছে।


2
চমৎকার কারণ এটি ব্যাখ্যা করে যে আমরা স্ট্রিং ভেরিয়েবলকে কীভাবে সুরক্ষিত করতে পারি যাতে +.রেজিএক্সপ্লেসে ব্যাখ্যার মতো চিহ্ন থাকতে পারে (যেমন )।
rchampourlier

1
এটি রুবি ২.১-তে ওপি যা জিজ্ঞাসা করছে তা করে না, এটি "[\ w \ s] +" => / [ডাব্লু \] \ + /
লুকা স্পিলার

@ লুকাস্পিলার আপনার একটি একক-উদ্ধৃত স্ট্রিং ব্যবহার করা দরকার, ব্যাকস্ল্যাশকে ডাবল-কোটেড স্ট্রিংগুলিতে একটি বিশেষ চরিত্র হিসাবে বিবেচনা করা হয়, যার কারণে উদাহরণস্বরূপ "\n"একটি নিউলাইন তবে '\n'এটি নয়।
স্যান্ডস্ট্রম

8

% স্বরলিপি ব্যবহার:

%r{\w+}m => /\w+/m

অথবা

regex_string = '\W+'
%r[#{regex_string}]

সহায়তা থেকে :

% r [] ইন্টারপোলটেড রেজিএক্সপ্যাক্স (সমাপ্ত ডিলিমিটারের পরে পতাকাগুলি প্রদর্শিত হতে পারে)


এটি রুবি ২.১-তে ওপি যা জিজ্ঞাসা করছে তা করে না, এটি "[\ w \ s] +" => / [ডাব্লুএস] + /
লুকা স্পিলার

1
@ লুকা স্পিলার, ধন্যবাদ, একক উদ্ধৃতি সেখানে ব্যবহার করা উচিত, আমি উত্তর আপডেট করব।
BitOfUniverse

5

মণি to_regexp কাজ করতে পারে।

"/[\w\s]+/".to_regexp => /[\w\s]+/

আপনি সংশোধক ব্যবহার করতে পারেন:

'/foo/i'.to_regexp => /foo/i

অবশেষে, আপনি ব্যবহার করে আরও অলস হতে পারেন: সনাক্ত করুন

'foo'.to_regexp(detect: true)     #=> /foo/
'foo\b'.to_regexp(detect: true)   #=> %r{foo\\b}
'/foo\b/'.to_regexp(detect: true) #=> %r{foo\b}
'foo\b/'.to_regexp(detect: true)  #=> %r{foo\\b/}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.