রুবি কি নিয়মিত এক্সপ্রেশনটির সাথে পারলে "! ~" এর মতো কোনও মিল নেই?


92

আমি শুধু জানতে চাই যে রুবি রেজেক্সের পার্লের মতো কোনও ম্যাচ অপারেটর রয়েছে কিনা !~। আমি মনে করি এটি ব্যবহার করা অসুবিধে হয় (?!xxx)বা (?<!xxxx)কারণ আপনি xxxঅংশে রেজেক্স প্যাটার্ন ব্যবহার করতে পারবেন না ।


8
আপনাকে যা করতে হয়েছিল তা হ'ল আগুন জ্বালিয়ে irbচেষ্টা করে দেখতে হয়েছিল। সম্ভবত কোনও এসও প্রশ্ন পোস্ট করার চেয়ে দ্রুত হত।
মার্ক টমাস

33
তবে 'রুবি মেলে না'
গুগল করা

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

4
তিনি এটিকে উপ-অনুকূলভাবে শব্দযুক্ত করেছেন। আমি যা বলতে চাইছিলাম তার অর্থ ছিল, "মনে রাখবেন আপনি গুলি চালিয়ে irbচেষ্টা করতে পারেন can সম্ভবত কোনও এসও প্রশ্ন পোস্ট করার চেয়েও দ্রুত, এমনকি সাধারণভাবে বিষয়গুলি পরীক্ষা করার একটি দুর্দান্ত সুযোগ" " কিভাবে সেটা আমি এই কথা শুনে যাহাই হউক না কেন।
ব্যবহারকারী 2066657

উত্তর:


158

হ্যাঁ: !~ঠিকঠাক কাজ করে - আপনি সম্ভবত ভেবেছিলেন এটি হবেনা কারণ এটি ডকুমেন্টেশন পৃষ্ঠা থেকে হারিয়েছেRegexp । তবুও, এটি কাজ করে:

irb(main):001:0> 'x' !~ /x/
=> false
irb(main):002:0> 'x' !~ /y/
=> true

9
!~অবজেক্টের অধীনে নথিভুক্ত করা হয় ।
টুনি ডি

4
রুবি ২.৪ এর সাথে কিছুটা সুন্দর সিনট্যাক্সও রয়েছে RegExp#match?, যা আপনি সহজেই উপেক্ষা করতে পারেন। রিলিজ নোট অনুসারে , এটি !~
20:52

6

আফাইক (?! Xxx) সমর্থিত:

2.1.5 :021 > 'abc1234' =~ /^abc/
 => 0
2.1.5 :022 > 'def1234' =~ /^abc/
 => nil
2.1.5 :023 > 'abc1234' =~ /^(?!abc)/
 => nil
2.1.5 :024 > 'def1234' =~ /^(?!abc)/
 => 0

এটি নিম্ন-স্তরের সমাধান। এইভাবে রেজিজেপস রূপান্তর করা সর্বদা সহজ নয়। অন্যদিকে, এই সমাধানটি শীর্ষ স্তরের প্রোগ্রামিং ভাষার উপর নির্ভর করে না;)
কনস্টান্টিন

0

পিছনে পার্ল, 'foobar' !~ /bar/স্ট্রিংটিতে "বার" থাকে না তা পরীক্ষা করে নিখুঁতভাবে পেরেছিলেন।

রুবিতে, বিশেষত একটি আধুনিক শৈলীর গাইড সহ, আমি মনে করি আরও সুস্পষ্ট সমাধান আরও প্রচলিত এবং বোঝা সহজ:

input = 'foobar'

do_something unless input.match?(/bar/) 

needs_bar = !input.match?(/bar/)

এটি বলেছিল, আমি মনে করি যদি কোনও .no_match?পদ্ধতি থাকে তবে এটি স্পিফাই হবে ।

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