নতুন রেখাসহ যেকোন চরিত্রের সাথে মিলে যাওয়ার জন্য রেজেক্স


222

"নিউলাইনস সহ সমস্ত অক্ষর" মিলে যাওয়ার জন্য কি একটি রেজেেক্স রয়েছে?

উদাহরণস্বরূপ, নীচের রেজেক্সে, কোনও আউটপুট আসেনি $2কারণ (.+?)ম্যাচের সময় নতুন লাইন অন্তর্ভুক্ত হয় না।

$string = "START Curabitur mollis, dolor ut rutrum consequat, arcu nisl ultrices diam, adipiscing aliquam ipsum metus id velit. Aenean vestibulum gravida felis, quis bibendum nisl euismod ut. 

Nunc at orci sed quam pharetra congue. Nulla a justo vitae diam eleifend dictum. Maecenas egestas ipsum elementum dui sollicitudin tempus. Donec bibendum cursus nisi, vitae convallis ante ornare a. Curabitur libero lorem, semper sit amet cursus at, cursus id purus. Cras varius metus eu diam vulputate vel elementum mauris tempor. 

Morbi tristique interdum libero, eu pulvinar elit fringilla vel. Curabitur fringilla bibendum urna, ullamcorper placerat quam fermentum id. Nunc aliquam, nunc sit amet bibendum lacinia, magna massa auctor enim, nec dictum sapien eros in arcu. 

Pellentesque viverra ullamcorper lectus, a facilisis ipsum tempus et. Nulla mi enim, interdum at imperdiet eget, bibendum nec END";

$string =~ /(START)(.+?)(END)/;

print $2;

1
আপনি রেজেক্স মডিফায়ার / ফ্ল্যাগগুলি যেমন: এম, এস (এম / রেজেক্স / আইএমএস ...) সম্পর্কে পড়তে চাইতে পারেন
স্নুফকিন

উত্তর:


194

নতুন রেখাগুলির সাথে মেলে তুলতে আপনার রেজেজেটে sসংশোধক যুক্ত করুন .:

$string =~ /(START)(.+?)(END)/s;

32
জাভাস্ক্রিপ্টে: (START) [\ s \ S] * (
সমাপ্তি

1
আরো @ Zymotik এর মন্তব্য সংক্রান্ত তথ্যের জন্য, দেখুন: stackoverflow.com/questions/1068280/...
জ্যাকব ভ্যান Lingen

2
জাভাতে আপনি রেইজেক্সের শুরুতে ইনলাইন পরিবর্তনকারী (? গুলি) ব্যবহার করতে পারেন, উদাহরণস্বরূপ 'আপনার প্যাটার্ন' ব্যবহারের পরে নিউলাইনগুলি সহ যে কোনও অক্ষর প্রতিস্থাপন করতে "(?s)yourPattern.*"- এছাড়াও দেখুন: rexegg.com/regex-modifiers.html#dotall
লুক্সোলার

রুবিতে, সংশোধকটি নেই m, না s। দেখুন: রুবুলার ডট কম
জোন স্নাইডার

312

আপনি যদি /sরেজেক্স সংশোধক যুক্ত করতে না চান (সম্ভবত আপনি এখনও .রিজেক্সের অন্য কোনও অর্থ এটি ধরে রাখতে চান ), আপনি একটি অক্ষর শ্রেণিও ব্যবহার করতে পারেন। একটি সম্ভাবনা:

[\S\s]

একটি অক্ষর যা কোনও স্থান নয় বা একটি স্থান। অন্য কথায়, যে কোনও চরিত্র।

আপনি রেগেক্সের ছোট্ট একটি অংশে স্থানীয়ভাবে পরিবর্তকও পরিবর্তন করতে পারেন:

(?s:.)

2
+1 আমি (?s:.)নিজেই সিনট্যাক্সের সাথে চিপ করতে চলেছি ।
বোল্টক্লক

(?:.|\n)কম মার্জিত না হওয়া ছাড়া কি কোনওভাবেই নিকৃষ্ট হয়?
ভ্লাস্টিমিল ওভেক

([\S\s]+)আমি যা খুঁজছিলাম ধন্যবাদ। +1
রায়ান

@ ভ্লাস্টিমিলভভক এটি রানটাইমের জন্য সত্যিই খারাপ হতে পারে যদি আপনি এটি ব্যবহার করেন *বা +যেহেতু 2 ^ n বিভিন্ন উপায়ে এটি দেওয়া দৈর্ঘ্যের যে কোনও স্ট্রিংয়ের সাথে মেলে।
রেডন রোজবারো

8

ইয়াপ, আপনাকে কেবল .ম্যাচটি নতুন লাইন তৈরি করতে হবে :

$string =~ /(START)(.+?)(END)/s;

-5

আপনি "মাল্টলাইন" ব্যবহার করতে চান।

$string =~ /(START)(.+?)(END)/m;

6
না, mপ্রভাবিত ^এবং $নোঙ্গর কিন্তু .
বোল্টক্লক

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