ইওএফের সাথে ম্যাচটি দেওয়ার জন্য রেজেক্স


90

আমার কাছে এমন কিছু ডেটা রয়েছে যা দেখতে এই জাতীয়

john, dave, chris
rick, sam, bob
joe, milt, paul

আমি নামগুলি মেলে এই রেজেক্সটি ব্যবহার করছি

/(\w.+?)(\r\n|\n|,)/

যা বেশিরভাগ অংশের জন্য কাজ করে তবে ফাইলটি শেষ শব্দের পরে হঠাৎ শেষ হয় যার অর্থ শেষ মানটি শেষ হয় না \r\n, \nবা ,এটি ইওএফ দিয়ে শেষ হয়। ইজেএফের সাথে রেগেজেসের কোনও মিল আছে কি তাই আমি এটি দ্বিতীয় গ্রুপিংয়ে রেখে দিতে পারি?


আপনি কি এক গ্রুপ বা নাম অনুসারে একটি ক্যাপচার গ্রুপে সমস্ত নাম ক্যাপচার করার চেষ্টা করছেন?
অ্যান্ড্রু হ্যারে

রেজেক্সের সমস্যায় পড়ার সময় একটি জিনিস হ'ল বিচ্ছিন্নতার ক্ষেত্রে আপনার উপাদানগুলির প্যাটার্ন চেষ্টা করা। আপনি যদি শেষে টোকেন সম্পর্কে উদ্বিগ্ন হন তবে তা ছাড়া আপনার অভিব্যক্তিটি পরীক্ষা করুন।
akf

কেবল একটি দুর্দান্ত রেজেক্স পরীক্ষামূলক সাইট যুক্ত করতে চেয়েছিলেন: regexplanet.com/simple
উত্তরপোল


@ সিনান - আমি সম্মত; মার্জ হয়েছে
মার্ক গ্রাভেল

উত্তর:


160

এই প্রশ্নের উত্তরটি খুঁজে পেতে \Zআমাকে কিছুটা সময় নিয়েছে, তবে এটি এখন কার্যকর। লক্ষ করুন যে বিপরীতে, \Aপুরো স্ট্রিংয়ের শুরুতে ম্যাচগুলি ( এক লাইনের শুরুর বিপরীতে ^এবং $মিলে যায়)।


4
শুধু একটি মাথা আপ আপনি একটি জন্য NetBeans এ ধরনের fonctionality পর হয় প্রকল্পের ফাইল অনুসন্ধান হিসাবে একটি উল্টোদিকে ফাইল অনুসন্ধান নিম্নলিখিত ভিন্নভাবে আচরণ করবে ... (\s*)\?>(\s*)\Z... এবং আরো কিছু এখানে খনন পর কি একটি প্রকল্প ফোল্ডারে কাজ করবে হয় : (\s*)\?>(\s*)(\n*)(\W)\Z এফওয়াইআই: এটি ফাইলের শেষে লাইন ব্রেক দ্বারা সমস্ত ক্লোজিং পিএইচপি ট্যাগগুলি প্রতিস্থাপন করা হয়।
মিডিয়াভিস

4
দেখা যাচ্ছে \Aভিজ্যুয়াল স্টুডিওতে অনুসন্ধান এবং প্রতিস্থাপনেও কাজ করে। সর্বদা সতর্কতার সাথে এই জাতীয় জিনিসগুলি ব্যবহার করুন তবে একবারে আমি খুশী হয়েছি যে এটি আসলে সঠিক জিনিসটি করবে তা সম্পর্কে আমার এক টন ম্যানুয়াল বেঁচে গেছে।
স্টিভ পেটিফায়ার

আমি Scannerএকবারে পুরো ফাইলটি পড়ার জন্য জাভার ক্লাস ব্যবহার করছি ; আমি যদি \Zডিলিমিটার হিসাবে ব্যবহার করি তবে ট্রেলিং করা নতুন লাইনের চরিত্রটি ছাঁটা। আমি যখন ডিলিমিটারে পরিবর্তিত হয়েছি তখন \zনতুন লাইনের চরিত্র সংরক্ষণ করা হবে। দেখে মনে হচ্ছে মার্টিন ডোরির উত্তর জাভাতেও প্রযোজ্য।
এমএমডিমিরবাস

24

ইওএফ আসলে কোনও চরিত্র নয়। আপনার যদি কোনও মাল্টি-লাইন স্ট্রিং থাকে, তবে '$' স্ট্রিংয়ের শেষের সাথে লাইনটির শেষের সাথেও মিলবে।

পার্ল এবং তার ভাইদের মধ্যে \Aএবং \Zশুরুতে এবং স্ট্রিংয়ের শেষ প্রান্ত মেলে পুরোপুরি লাইন বিরতি উপেক্ষা।

POSIX regexes ব্যবহারের গনুহ এক্সটেনশন \`এবং \'একই জিনিস জন্য।


17

ভিসুয়াল স্টুডিও, আপনি ফাইলের শেষে তাই মত পেতে পারবেন: $(?![\r\n])। আপনার লাইনের সমাপ্তি সিআর, সিআরএলএফ, বা কেবল এলএফ কিনা তা এটি কাজ করে।

বোনাস হিসাবে, আপনি নিশ্চিত করতে পারেন যে আপনার সমস্ত কোড ফাইলগুলিতে চূড়ান্ত নিউলাইন মার্কার রয়েছে:

               Find What: (?<![\r\n])$(?![\r\n])
            Replace With: \r\n
 Use Regular Expressions: checked
Look at these file types: *.cs, *.cshtml, *.js

এটি কীভাবে কাজ করে:

সিআর বা এলএফের পূর্বে নয় এমন কোনও লাইন প্রান্ত (একটি শূন্য-প্রস্থের ম্যাচ) সন্ধান করুন এবং সিআর বা এলএফ দ্বারা অনুসরণ করা হবে না। কিছু চিন্তা আপনাকে দেখিয়ে দেবে কেন এই কাজ করে!

মনে রাখবেন যে আপনার পছন্দসই লাইন-এন্ডিং চরিত্রটি প্রতিস্থাপন করা উচিত, সে সিআর, এলএফ বা সিআরএলএফ হোক।


ভিজ্যুয়াল স্টুডিও ২০১২-তে একটি বাগ রয়েছে যেখানে এটির পরিবর্তে সমস্ত কিছু করার ফলে ফাইলের শেষে দুটি নতুন লাইন যুক্ত হতে পারে। আমি মনে করি সেভ অপশনে অটো-সন্নিবেশ করা নতুন লাইনের সাথে এর কিছু করার আছে।
স্টিভয়েসিয়াক

9

রায়ানের প্রস্তাবিত \ Z এর সাথে \ z এর আচরণের বিপরীতে:

l perl -we 'আমার $ কর্পাস = "হ্যালো; n"; $ কর্পাস = ~ এস / \ জেড / ওয়ার্ল্ড / জি; মুদ্রণ (": $ কর্পাস: \ n") '
:ওহে বিশ্ব
বিশ্ব:
l perl -we 'আমার $ কর্পাস = "হ্যালো; n"; $ কর্পাস = ~ এস / \ জেড / ওয়ার্ল্ড / জি; মুদ্রণ (": $ কর্পাস: \ n") '
:হ্যালো
বিশ্ব:
$ 

পেরেল সেজ:

String জেড ম্যাচটি কেবল স্ট্রিংয়ের শেষে, বা শেষে নতুন লাইনের আগে
string z কেবল স্ট্রিংয়ের শেষে ম্যাচ

রুবিতে পরীক্ষার মামলার অনুবাদ (১.৮..7, ১.৯.২) একই আচরণ করে।


2

আপনার কি সত্যিই লাইন বিভাজক ক্যাপচার করতে হবে? যদি তা না হয় তবে এই রেজেক্সটি আপনার যা প্রয়োজন তা হ'ল:

/\w+/

এটি ধরে নিচ্ছে যে সমস্ত সাবস্ট্রিংগুলি আপনি মেলে দেখতে চান তা উদাহরণস্বরূপ পুরো শব্দের অক্ষর দ্বারা গঠিত of



2

সম্প্রতি আমি এই জাতীয় কিছু খুঁজছিলাম, তবে জাভাস্ক্রিপ্টের জন্য।

এটি এখানে রেখে দেওয়া, যাতে একই সমস্যাযুক্ত যে কেউ উপকৃত হতে পারে

var matchEndOfInput = /$(?![\r\n])/gm;

মূলত এটি লাইনের শেষের সাথে মিলে যায়, যা ক্যারেজ রিটার্ন বা নতুন লাইনের অক্ষর দ্বারা অনুসরণ করা হয় না। সংক্ষেপে এটি \Zজাভাস্ক্রিপ্টের মতো তবে একই ।


1

ধরে নিই যে আপনি স্ট্রিংকে পুরো হিসাবে গণ্য করতে যথাযথ মডিফায়ার ব্যবহার করছেন (লাইন বাই লাইন নয় - এবং \ n যদি আপনার জন্য কাজ করে তবে আপনি এটি ব্যবহার করছেন), কেবল অন্য বিকল্প যুক্ত করুন - স্ট্রিংয়ের শেষ: (\ r \ n | \ n |, | $)


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