পাওয়ারশেল এবং কন্টেন্ট অপারেটর


143

নিম্নলিখিত স্নিপেট বিবেচনা করুন:

"12-18" -Contains "-"

আপনি মনে করেন এটি মূল্যায়ন করে trueতবে এটি হয় না। এটি falseপরিবর্তে মূল্যায়ন করবে । আমি নিশ্চিত না কেন এটি ঘটে, তবে তা ঘটে।

এড়াতে, আপনি এটি পরিবর্তে এটি ব্যবহার করতে পারেন:

"12-18".Contains("-")

এখন এক্সপ্রেশন সত্যকে মূল্যায়ন করবে।

প্রথম কোড স্নিপেট কেন এমন আচরণ করে? এমন কি বিশেষ কিছু আছে যা নিয়ে -ভাল করে খেল না -Contains? ডকুমেন্টেশন এ ব্যাপারে কিছুই উল্লেখ নেই।

উত্তর:


196

-Containsঅপারেটর তুলনা সাবস্ট্রিং কাজ করে না এবং ম্যাচ সম্পূর্ণ স্ট্রিং হওয়া আবশ্যক এবং সংগ্রহগুলি অনুসন্ধান করতে ব্যবহার করা হয়।

যে ডকুমেন্টেশন থেকে আপনি লিঙ্ক করেছেন:

- অন্তর্ভুক্ত বিবরণ: ধারক অপারেটর। রেফারেন্স মানগুলির সংকলনে একটি একক পরীক্ষার মান অন্তর্ভুক্ত কিনা তা জানায়।

উদাহরণ হিসাবে আপনি প্রদান করেছেন আপনি কেবল একটি স্ট্রিং আইটেমযুক্ত সংগ্রহের সাথে কাজ করছেন।

আপনি যে ডকুমেন্টেশনটির সাথে লিঙ্ক করেছেন তা যদি আপনি পড়ে থাকেন তবে আপনি একটি উদাহরণ দেখতে পাবেন যা এই আচরণটি দেখায়:

উদাহরণ:

PS C:\> "abc", "def" -Contains "def"
True

PS C:\> "Windows", "PowerShell" -Contains "Shell"
False  #Not an exact match

আমার মনে হয় আপনি যা চান সেটি -Matchঅপারেটর:

"12-18" -Match "-"

যা ফিরে আসে True

গুরুত্বপূর্ণ: মন্তব্যগুলিতে এবং লিঙ্কযুক্ত ডকুমেন্টেশনে নির্দেশিত হিসাবে , এটি লক্ষ্য করা উচিত যে -Matchঅপারেটর টেক্সট মিলটি সম্পাদন করতে নিয়মিত এক্সপ্রেশন ব্যবহার করেন ।


14
সম্পূর্ণতার জন্য, যদিও ম্যাচটি ম্যাচটি ভাল ম্যাচ হতে পারে এটি রেজেেক্স ব্যবহার করে। যদি কোনও অস্পষ্ট স্ট্রিং থাকে তবে ওপি বর্ণিত হিসাবে এটি করা উচিত যাচাই করতে হবে:"12-18".Contains("-")
ডিএইচ

4
@ 8 ডিএইচ - খুব ভাল ধরা :)। প্রশ্নটি পুনরায় পড়ার পরে আমি মনে করি আমাকে Containsপাওয়ারশেল অপারেটর এবং .Contains() .NET String পদ্ধতির মধ্যে পার্থক্য পরিষ্কার করা দরকার ।
কেভ

1
ইতিমধ্যে উপরে মন্তব্যে উল্লিখিত হিসাবে, -Matchregex ব্যবহার করে। এর অর্থ হ'ল স্ট্রিং প্যারামিটারটি একটি রেজেক্স, সাধারণ স্ট্রিং নয়। উদাহরণস্বরূপ, "hello" -Match "."সত্য ফিরে আসবে, কারণ "."এটি একটি 'রেজেক্স' ' যে কোনও চরিত্রের সাথে মিলবে। কোনও স্ট্রিংয়ে পুরো স্টপ রয়েছে কিনা তা পরীক্ষা করতে: "hello" -Match "\."(মিথ্যা প্রত্যাবর্তন করে)
মল্লা

1
@ মমলা - ভাল কথা, আমি এ সম্পর্কে একটি নোট এডিট করেছি। ধন্যবাদ।
কেভ

এটি অবশ্যই "মিথ্যা বন্ধু"! :) "তালিকাগুলি" অর্থ "তালিকার সাথে সম্পর্কিত" এর অস্তিত্ব।
রাউল স্যালিনাস-

38

-Containsআসলে একটি সংগ্রহ অপারেটর। সংগ্রহটিতে যদি অবজেক্ট থাকে তবে এটি সত্য। এটি স্ট্রিংয়ের মধ্যে সীমাবদ্ধ নয়।

-matchএবং-imatch নিয়মিত এক্সপ্রেশন স্ট্রিং ম্যাথার এবং ক্যাপচারের সাথে ব্যবহারের জন্য স্বয়ংক্রিয় ভেরিয়েবল সেট করে।

-like, -ilikeএসকিউএল-এর মতো ম্যাথচারগুলি।


13

আপনি ব্যবহার করতে পারেন like:

"12-18" -like "*-*"

বা এর splitজন্য contains:

"12-18" -split "" -contains "-"

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