সমান দৈর্ঘ্যের অংশগুলিতে স্ট্রিংগুলি বিভক্ত করা n
বেশিরভাগ "সাধারণ" ভাষায় যেমন টিএমটিওটিডিআই হয় (এটি করার একাধিক উপায় রয়েছে)) আমি এখানে ধরে নিচ্ছি যে ইনপুটটিতে লাইনফিড নেই, এবং "বিভক্তকরণ" এর অর্থ এটি লাইনে বিভক্ত। তবে দুটি পৃথক লক্ষ্য রয়েছে: স্ট্রিংয়ের দৈর্ঘ্য যদি অংশের দৈর্ঘ্যের একাধিক না হয়, আপনি কি অসম্পূর্ণ ট্রেলিং অংশটিকে রাখতে চান বা আপনি এটিকে বাতিল করতে চান?
অসম্পূর্ণ ট্রেলিংয়ের অংশটি রাখা
সাধারণভাবে, রেটিনায় বিভাজন সম্পর্কে তিনটি উপায় রয়েছে। আমি এখানে তিনটি পদ্ধতিরই উপস্থাপন করছি, কারণ আপনি যখন কোনও সম্পর্কিত সমস্যার সাথে খাপ খাইয়ে নেওয়ার চেষ্টা করেন তখন তারা হয়ত আরও বড় পার্থক্য করতে পারে। আপনি একটি প্রতিস্থাপন ব্যবহার করতে পারেন এবং প্রতিটি ম্যাচে একটি লাইনফিড যুক্ত করতে পারেন:
.{n}
$&¶
যে 8 বাইট (একটু কম হলে বা এর n = 2
বা n = 3
তারপর আপনি ব্যবহার করতে পারেন কারণ ..
বা ...
যথাক্রমে)। এটি একটি অতিরিক্ত লাইনফীড appends যদি স্ট্রিং দৈর্ঘ্য: যদিও এই এক সমস্যা হয়েছে হয় খণ্ড দৈর্ঘ্যের একটি একাধিক।
আপনি একটি বিভক্ত পর্যায়েও ব্যবহার করতে পারেন এবং বিভক্তিতে ক্যাপচারগুলি ধরে রাখা হয় তা ব্যবহার করে:
S_`(.{n})
_
বিকল্প খালি লাইন অন্যথায় মিল সহ সমগ্র স্ট্রিং আচ্ছাদন থেকে যাবে সরিয়ে ফেলা হয়। এটি 9 বাইট, তবে এটি কোনও ট্রেলিং লাইনফিড যোগ করে না। জন্য n = 3
এটা 8 বাইট এবং জন্য n = 2
এটা 7 বাইট। মনে রাখবেন যে খালি রেখাগুলি কোনও বিষয় না রাখলে আপনি সামগ্রিকভাবে একটি বাইট সংরক্ষণ করতে পারবেন (উদাহরণস্বরূপ আপনি কেবল খালি খালি লাইনগুলি প্রক্রিয়াকরণ করবেন এবং পরে যে কোনওভাবে লাইনফিডগুলি পরিত্রাণ পাবেন): তবে আপনি এটি সরাতে পারবেন _
।
তৃতীয় বিকল্পটি ম্যাচ ব্যবহার করা। সঙ্গে !
বিকল্প আমরা সবাই ম্যাচ মুদ্রণ করতে পারেন। তবে, পিছনের অংশটি অন্তর্ভুক্ত করার জন্য, আমাদের একটি চলক ম্যাচের দৈর্ঘ্যের জন্য অনুমতি দেওয়া প্রয়োজন:
M!`.{1,n}
এটি 9 বাইট এবং এটির পিছনে লাইনফিডও থাকবে না। এই জন্য 8 বাইট হয়ে n = 3
করে ..?.?
। তবে নোট করুন যে এটি 6 বাইটে হ্রাস পেয়েছে n = 2
কারণ এখন আমাদের কেবল প্রয়োজন ..?
। এছাড়াও মনে রাখবেন যে M
যদি আপনার প্রোগ্রামের এটি শেষ পর্যায়ে থাকে তবে যে কোনও ক্ষেত্রেই একটি বাইট সংরক্ষণ করা যায় dropped
অসম্পূর্ণ ট্রেলিং অংশটিকে বাতিল করা হচ্ছে
যদি আপনি এটি প্রতিস্থাপনের সাথে করার চেষ্টা করেন তবে এটি সত্যিই দীর্ঘ হয়ে যায়, কারণ আপনাকে পিছনের অংশটিকে কোনও কিছুর (যদি এটি উপস্থিত থাকে) এবং বিভাজন দিয়েও প্রতিস্থাপন করতে হবে। সুতরাং আমরা সেগুলি নিরাপদে উপেক্ষা করতে পারি। মজার বিষয় হল ম্যাচের পদ্ধতির জন্য এটি বিপরীত: এটি আরও খাটো হয়ে যায়:
M!`.{n}
7 বাইট, বা এর চেয়ে ছোট n = 2
, n = 3
। আবার, দ্রষ্টব্য যে আপনি M
কোডটি শেষের পর্যায়ে থাকলে এটি বাদ দিতে পারেন।
আপনি যদি এখানে একটি ট্রেলিং লাইনফিড চান তবে আপনি এটি রেগেক্সে সংযুক্ত করে পেতে পারেন |$
।
বোনাস: ওভারল্যাপিং খণ্ডগুলি
মনে রাখবেন যে M
হয়েছে &
বিকল্প যা ওভারল্যাপিং ম্যাচ (যা সাধারণত Regex সম্ভব নয়) ফেরৎ। এটি আপনাকে প্রদত্ত দৈর্ঘ্যের স্ট্রিংয়ের সমস্ত ওভারল্যাপিং খণ্ডগুলি (সাবস্ট্রিংগুলি) পেতে দেয়:
M!&`.{n}