রুবি% r {} এক্সপ্রেশন


131

একটি মডেল একটি ক্ষেত্র আছে

validates :image_file_name, :format => { :with => %r{\.(gif|jpg|jpeg|png)$}i

এটি আমার কাছে বেশ অদ্ভুত লাগছে। আমি সচেতন যে এটি একটি নিয়মিত প্রকাশ। তবে আমি চাই:

  • এর সঠিক অর্থ কী তা জানার জন্য। কি %r{value}সমান /value/?
  • সাধারণ রুবি রেজেক্স অপারেটর /some regex/বা এর সাথে এটি প্রতিস্থাপন করতে সক্ষম হন ~=। এটা কি সম্ভব?

উত্তর:


254

%r{}/.../স্বরলিপিটির সমতুল্য , তবে এগুলি থেকে বাঁচতে না পেরে আপনি আপনার regexp এ '/' রাখতে পারবেন:

%r{/home/user}

সমান:

/\/home\/user/

এটি কেবল সুসংগঠিত পণ্য leg

সম্পাদনা:

মনে রাখবেন আপনি '{}' এর পরিবর্তে প্রায় কোনও বর্ণমালার অক্ষর জুড়ি ব্যবহার করতে পারেন। এই রূপগুলি ঠিক পাশাপাশি কাজ করে:

%r!/home/user!
%r'/home/user'
%r(/home/user)

সম্পাদনা 2:

নোট করুন যে %r{}xরূপটি সাদা রঙের স্থানটিকে উপেক্ষা করে, জটিল রিজেগসপগুলি আরও পঠনযোগ্য করে তোলে। গিটহাবের রুবি স্টাইল গাইড থেকে উদাহরণ :

regexp = %r{
  start         # some text
  \s            # white space char
  (group)       # first group
  (?:alt1|alt2) # some alternation
  end
}x

5
ডাউনভোটটি ছিল 1 ঘন্টা আগে কেবল। বিভেদক হিসাবে স্থান হিসাবে, এই ভয়ঙ্কর, কিন্তু জিনিস আমি beeing ছাড়া আপনার কোড পড়া পাবে recommand হবে সাজানোর ছয় মাস পরে হতভম্ব :)
ইউরেকা

3
আপনি যদি আপনার ডিলিমিটার হিসাবে স্পেস ব্যবহার করেন, আপনি যদি পরে এটিতে স্পেস যোগ করেন তবে আপনার নিয়মিত অভিব্যক্তিটি ভেঙে যাবে। আমি মনে করি ধারণাটি হ'ল এমন ডিলিমিটারগুলি ব্যবহার করা যা আপনার নিয়মিত অভিব্যক্তিতে কোনও কিছুর সাথে মেলে না, পছন্দসই ডিফল্ট হিসাবে কোঁকড়া ধনুর্বন্ধনী সহ।
স্টিভেন হার্লস্টন

1
এটি প্রায় মনে হয় রুবি যতটা সম্ভব ভয়াবহ কোড লেখার জন্য ডিজাইন করা হয়েছিল
রোমান

আপনার দ্বিতীয় সম্পাদনার নোট বুঝতে পারছেন না। বিশেষ কী %r{}x? /.../xহোয়াইটস্পেস উপেক্ষা করে। এটি %rসিনট্যাক্সের কোনও বিশেষ সম্পত্তি নয় । সমস্ত বিকল্প যা অনুসরণ /../করতে পারে তা অনুসরণ করতে পারে %r{}
মক্কি

9

\.=> এর মধ্যে একটি বিন্দু থাকে>> এর
(gif|jpg|jpeg|png)পরে, এর মধ্যে একটির এক্সটেনশানগুলির
$=
i= প্রান্তটি , এর পরে কিছুই নেই>> সংবেদনশীল

এবং এটি লেখার মতোই /\.(gif|jpg|jpeg|png)$/i


% R {মান / কি / মান / এর সমান?
আলেকজান্দ্রে

হ্যাঁ, এটি একই রকম। - যেমন উদাহরণ %w[1 2 3]হিসাবে একই [1, 2, 3]
সামি ডিন্ডে

6
%w[1 2 3]হিসাবে একই হয় না[1, 2, 3] । এটা যেমন হয় ['1', '2', '3']
Jörg W Mittag

@ জার্গডব্লিউমিতাগ সংশোধন করার জন্য ধন্যবাদ।
স্যামি ডিন্ডে

9

এর সাথে %r, আপনি যে কোনও ডিলিমিটার ব্যবহার করতে পারেন।

আপনি ব্যবহার করতে পারে %r{}বা %r[]বা %r!!ইত্যাদি

অন্যান্য ডিলিমিটারগুলি ব্যবহার করার সুবিধাটি হ'ল আপনার /স্বাভাবিক রেজেক্স আক্ষরিক ব্যবহার থেকে বাঁচার দরকার নেই ।


3

এই রেজিপ্সে .gif, .jpg ... দিয়ে শেষ হওয়া সমস্ত স্ট্রিংয়ের সাথে মেলে

আপনি এটি দিয়ে প্রতিস্থাপন করতে পারে

/\.(gif|jpg|jpeg|png)$/i

1

এর অর্থ এটি image_file_nameশেষ হতে হবে ($ বিন্দুতে এবং জিএফ, জেপিজি, জেপেইগ বা পিএনজি এর একটিতে )।

হ্যাঁ %r{}ঠিক একইরকম অর্থ //কিন্তু %r{}আপনার পালানোর দরকার নেই /

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