একটি নির্দিষ্ট একটি বাদে কোনও অ-সাদা স্থানের অক্ষরটি কীভাবে মেলে?


111

পার্লে \Sকোনও অ-সাদা অংশের অক্ষরের সাথে মেলে।

আমি কীভাবে ব্যাকস্ল্যাশ বাদে কোনও অ-হোয়াইটস্পেসের চরিত্রের সাথে মিল রাখতে পারি \?

উত্তর:


154

আপনি একটি অক্ষর শ্রেণি ব্যবহার করতে পারেন :

/[^\s\\]/

এমন কোনও কিছুর সাথে মেলে যা একটি শ্বেতক্ষেত্রের চরিত্র বা নয় \। এখানে আরও একটি উদাহরণ:

[abc]অর্থ "মিল a, bবা c"; [^abc]মানে হলো "ছাড়া কোন চরিত্র মেলে a, bবা c"।


কখন ^প্রত্যাখ্যান হিসাবে ব্যাখ্যা করা হয় এবং কখন লাইন শুরু হিসাবে? সেই ক্ষেত্রে, কেন এই $0~/\s*^\s/
জায়গাটি

1
একটি অক্ষর শ্রেণীর বাইরে এটি "স্ট্রিংয়ের শুরু" (বা বর্তমান লাইনের মোডের উপর নির্ভর করে লাইন)। একটি অক্ষর শ্রেণীর অভ্যন্তরে, এবং কেবলমাত্র এটি যদি প্রথম খন্ড খোলার পরে বন্ধনী হয় তবে এটি অক্ষর শ্রেণীর বিষয়বস্তু অবহেলা করে।
টিম পিটজ্যাকার 21 '45

নীচের ম্যাচের লাইনটি $0~/\s*^\s/কোনও শ্বেত শূন্যস্থান নয় এমন কোনও চরিত্রের পরে অনেকগুলি শ্বেত স্পেস দিয়ে শুরু হবে
আলেকজান্ডার সিস্কা

1
এটি সম্ভবত হওয়া উচিত /^\s+/- এক বা একাধিক সাদা বর্ণের অক্ষর দ্বারা অনুসরণ করা লাইনের শুরু।
টিম পিটজ্যাকার

1
@ আলেকজান্ডারসস্কা, আপনি কি এটি বের করেছেন? উপরের উত্তরটি কেবল একটি স্ট্রিংয়ের প্রথম ম্যাচটি ফেরত দেবে। আপনি যদি সমস্ত ম্যাচ ফেরত চান তবে gসংশোধক যুক্ত করুন। /[^\s\\]/g
বেন কার্প

14

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

/(?=\S)[^\\]/

2
এটি কোনও স্থান না থাকলে এটি সামনে দেখায়। এবং তারপরে নেতিবাচক শ্রেণি আপনার শ্রেণীর অক্ষরগুলি বাদে যেকোন কিছু গ্রহণ করে (যা কোনও স্থান নয়)।
ডেনিস ডি বার্নার্ডি

আমি এই সমাধানটি পছন্দ করি। "আমাকে সাদা /(?=\S)\W/
বাক্স

আমার এমন পরিস্থিতি হয়েছিল যেখানে আমার কোনও অ-সাদা বর্ণের চরিত্রের পাশাপাশি অ-উক্তিগুলির সাথে মিল রাখতে হবে। এটি স্পেসের জন্যও অনুমতি দিতে হয়েছিল। উদা: THIS IS A TEST, AND AGAIN। নিম্নলিখিত আমার জন্য ভাল কাজ করে (?=\S)[^"]*
আরভো বোভেন

গৃহীত উত্তরটি আমার পক্ষে কার্যকর হয়নি তবে এটি করেছে। আমি এটি সাব্লাইম টেক্সট রেজেক্স অনুসন্ধানে ব্যবহার করছিলাম
ক্রিশ্চিয়ান নোয়েল

5

এটি আমার জন্য সেড ব্যবহার করে কাজ করেছে [ সম্পাদনা করুন: নীচে মন্তব্যগুলি নীচে সেড সমর্থন করে না] গুলি]

[^ ]

যখন

[^\s] 

না

# Delete everything except space and 'g'
echo "ghai ghai" | sed "s/[^\sg]//g"
gg

echo "ghai ghai" | sed "s/[^ g]//g"
g g

3
\sশুধু স্থান অক্ষরের চেয়েও বেশি মিলছে। এর মধ্যে রয়েছে ট্যাব, লাইনফিডের ক্যারেজ রিটার্ন এবং অন্যান্য (আরও কতজন রেজেক্স গন্ধের উপর নির্ভরশীল) অন্তর্ভুক্ত। এটি পার্ল আবিষ্কার, মূলত পসিক্স অক্ষর শ্রেণীর জন্য একটি শর্টহ্যান্ড [:space:]এবং এতে সমর্থন নেই sed। আপনার উপরের প্রথম রেজেক্স হওয়া উচিত s/[^[:space:]g]//g
অ্যালান মুর

হ্যাঁ @ অ্যালানমুর কাজ করেছেন: ফলন echo "ghai ghai" | sed "s/[^[:space:]g]//g" :g g
ঝড়_ম 2138

1

আমার সিস্টেমে: সেন্টস 5

আমি \sসংগ্রহের বাইরে ব্যবহার করতে পারি তবে সংগ্রহের [:space:]অভ্যন্তরে ব্যবহার করতে হবে । আসলে আমি [:space:]কেবল সংগ্রহের অভ্যন্তরেই ব্যবহার করতে পারি । সুতরাং এটি ব্যবহার করে একটি জায়গার সাথে মেলে আমাকে ব্যবহার করতে হবে [[:space:]] যা সত্যিই অদ্ভুত।

echo a b cX | sed -r "s/(a\sb[[:space:]]c[^[:space:]])/Result: \1/"

Result: a b cX
  • আমি প্রথম স্থানের সাথে মেলে \s
  • আমি দ্বিতীয় স্থানের সাথে বিকল্পভাবে মেলে [[:space:]]
  • একাদশ ম্যাচটি "সমস্ত কিন্তু স্থান নেই" এর সাথে মেলে [^[:space:]]

এই দুটি কাজ করবে না:

a[:space:]b  instead use a\sb or a[[:space:]]b

a[^\s]b      instead use a[^[:space:]]b

1
Sed.৪ হিসাবে, এটি আপাতদৃষ্টিতে এখনও সত্য যে এর ([^[:space:]])পরিবর্তে আপনাকে ব্যবহার করতে হবে ([^\s])। আমি
ওপেনসুএস টাম্বলওয়েড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.