নিয়মিত অভিব্যক্তিগুলি পদ্ধতিগতভাবে শেখা (১): প্রাথমিক নিবন্ধ

লেখক:ছোট্ট স্বপ্ন, তৈরিঃ 2017-03-29 10:52:47, আপডেটঃ 2020-11-18 12:39:53

নিয়মিত অভিব্যক্তিগুলি পদ্ধতিগতভাবে শেখা (১): প্রাথমিক নিবন্ধ

একটি নিয়মিত অভিব্যক্তি কি? নিয়মিত অভিব্যক্তি হ'ল একটি নির্দিষ্ট সংখ্যক পূর্বনির্ধারিত অক্ষর এবং এই নির্দিষ্ট অক্ষরগুলির সংমিশ্রণ যা স্ট্রিংয়ের জন্য ফিল্টারিং যুক্তি প্রকাশের জন্য ব্যবহৃত হয়।

  • নিয়মিত অভিব্যক্তির মাধ্যমে নিম্নলিখিত উদ্দেশ্যগুলি অর্জন করা যায়ঃ

    给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);
    可以通过正则表达式,从字符串中获取我们想要的特定部分。
    

    এই নিবন্ধে আমি ম্যাকের জন্য অনেক ভাল সফ্টওয়্যার সুপারিশ করেছি।

    img

নিচে আমরা নিয়মিত অভিব্যক্তির বিভিন্ন নিয়মের ব্যাখ্যা দিয়ে শুরু করছিঃ

  • সাধারণ পাঠ্য অক্ষরের সাথে মেলে

    একটি রিয়েল এক্সপ্রেশন শুধুমাত্র সাধারণ টেক্সট ধারণ করতে পারে, যা এই টেক্সটটির সাথে সঠিকভাবে মেলে। উদাহরণস্বরূপঃ

    সাধারণ অভিব্যক্তিঃsongঅনুরাগী চয়নঃ xiao songge ম্যাচিংয়ের ফলাফলঃ xiaosongজিয়াও সংগে নিয়মিত অভিব্যক্তিগুলি ডিফল্টরূপে বড় আকারে লেখা হয়, তাই গানটি মেলে না। Song. কিন্তু বেশিরভাগ নিয়মিত অভিব্যক্তি বাস্তবায়নগুলি একটি বিকল্প সরবরাহ করে যা বড় আকারে লেখা হয় না।

  • যেকোনো অক্ষরের সাথে মেলে

    . একটি নির্বাচিত অক্ষরের সাথে মেলে, যেমনঃ

    নিয়মিত অভিব্যক্তিঃ c.t মেলে না পাঠ্যঃ cat cet caaat dog ম্যাচিংয়ের ফলাফলঃcat cetক্যাট ডগ বিশ্লেষণঃ c.t একটি স্ট্রিংয়ের সাথে মেলে যা "c" দিয়ে শুরু হয় এবং "t" দিয়ে শেষ হয়।

    同理,多个连续的.可以匹配多个连续的任意字符:

    নিয়মিত অভিব্যক্তিঃ c...t অনুরাগী চয়নঃ cat cet caat dog ম্যাচিংয়ের ফলাফলঃ cat cetcaatকুকুর

  • বিশেষ অক্ষরের সাথে মেলে

    . একটি বিশেষ অক্ষর, যা নিয়মিত অভিব্যক্তিতে বিশেষ অর্থ ধারণ করে।. এটি একটি বিশেষ অক্ষর, যা বিশেষ অক্ষরের প্রতি রূপান্তরমূলক ভূমিকা পালন করতে পারে।............

    নিয়মিত অভিব্যক্তিঃ c.t মেলে না পাঠ্যঃ cat c.t dog ম্যাচিংয়ের ফলাফলঃ catc.tকুকুর দ্রষ্টব্যঃ যেহেতু \ একটি বিশেষ অক্ষর, তাই একটি প্রকৃত \ অক্ষর মেলে, দুটি বিপরীত সিলিকা ব্যবহার করা প্রয়োজন \:

    নিয়মিত এক্সপ্রেশনঃ c\t মেলে না পাঠ্যঃ cat c\t dog ম্যাচিংয়ের ফলাফলঃ catc\tকুকুর

  • অক্ষর সেট ব্যবহার করুন

    উপরে বলা হয়েছে. একটি নির্বাচিত অক্ষরের সাথে মেলে, কিন্তু যদি আমি কয়েকটি নির্দিষ্ট অক্ষরের সাথে মেলে? একটি নির্দিষ্ট অক্ষরের সাথে মেলে [এবং] মেটা অক্ষর ব্যবহার করা যেতে পারে।

    নিয়মিত অভিব্যক্তিঃ c[ab]t মেলে না পাঠ্যঃ cat cbt cet ম্যাচিংয়ের ফলাফলঃcat cbtসেট বিশ্লেষণঃ [ab] "a বা b " এর সাথে মেলে; সুতরাং c[ab]t cat এবং cbt এর সাথে মেলে কিন্তু cet এর সাথে মেলে না।

  • অক্ষর গোষ্ঠী ব্যবধান ব্যবহার করুন

    উপরের উদাহরণে, যদি আমি [a-z] এর মধ্যে একটি যোগ করতে চাই, তাহলে আমি [cet] এর সাথে কি করব? যদি আমি [a-z] এর সাথে কোন ছোট হাতের অক্ষর যোগ করতে চাই, তাহলে আমি কয়েক ডজন লিখব? যদিও এটি সম্ভব, তবে এটি খুব দীর্ঘ। এখানে আমরা [a-z] ব্যবহার করতে পারিঃ

    নিয়মিত অভিব্যক্তিঃ c[a-z]t মেলেনি পাঠ্যঃ cat cbt czt c2t ম্যাচিংয়ের ফলাফলঃcat cbt cztc2t বিশ্লেষণঃ c[a-z]t "c" দিয়ে শুরু হয়, "t" দিয়ে শেষ হয়, মাঝখানে "a" - "z" এর যেকোনো একটি অক্ষর।

    এদিকে, বাংলাদেশের বিভিন্ন অঞ্চলে এই ধরনের ঘটনা ঘটেছে।

    [0-9] এবং [0123456789] এর একই ফাংশন। [A-F] A থেকে F পর্যন্ত বড় হাতের অক্ষরের সাথে মেলে। [A-Z] A থেকে Z পর্যন্ত সব বড় অক্ষরের সাথে মেলে। [a-z] সব a থেকে z পর্যন্ত ছোট হাতের অক্ষরের সাথে মেলে। [A-z] ASCII A থেকে ASCII z পর্যন্ত সমস্ত অক্ষর মেলে ((শুধুমাত্র সমস্ত অক্ষর নয়, ASCII টেবিলের মধ্যে A থেকে z পর্যন্ত অক্ষরগুলির সাথেও মেলে, যেমন [ এবং ^ ইত্যাদি) ।) [A-Za-z0-9] সব বড় হাতের অক্ষর এবং সংখ্যা মেলে।

  • অ অক্ষর সেট মেলে

    অক্ষর সেট সাধারণত এমন একটি সেটকে নির্দিষ্ট করার জন্য ব্যবহৃত হয় যার সাথে আপনি মেলে যেতে চান। তবে কখনও কখনও আপনি এমন একটি সেটকে বাদ দিতে চান যা আপনি মেলে যেতে চান না। এটি অক্ষর সেটকে অস্বীকার করে করা যেতে পারে। উদাহরণস্বরূপঃ

    নিয়মিত অভিব্যক্তিঃ c[^a-z]t মেলেনি পাঠ্যঃ cat cbt czt c2t cAt ম্যাচিংয়ের ফলাফলঃ cat cbt cztc2t cAtবিশ্লেষণঃ এটি পূর্ববর্তী উদাহরণের সম্পূর্ণ বিপরীত। ⇒ [a-z] সব ছোট অক্ষরের সাথে মেলে, যখন [^a-z] সব অ-ছোট অক্ষরের সাথে মেলে।

    মনে রাখবেন, ^ অক্ষরটি অক্ষর সেটে থাকা সমস্ত অক্ষরকে অপসারণ করে।

  • মূল অক্ষর

    মৌলিক অক্ষরগুলির একটি বিশেষ অর্থ রয়েছে, যা আমরা আগে বলেছি, যেমন... [এবং]....................

    সমস্ত মেটা অক্ষরগুলির আগে বিপরীত স্রোতের রূপান্তর যুক্ত করা যেতে পারে, যখন রূপান্তরিত হয়, তখন অক্ষরগুলি তাদের বিশেষ অর্থের পরিবর্তে নিজের সাথে মেলে; উদাহরণস্বরূপ, "[ম্যাচ করবে" []:

    আনুষ্ঠানিক অভিব্যক্তিঃ a[b] মেলে না পাঠ্যঃ a[b ab a[[b ম্যাচিংয়ের ফলাফলঃa[bab a[[b দ্রষ্টব্যঃ \ একটি রূপান্তরিত মেটা অক্ষর ব্যবহার করে, যার অর্থ \ একটি মেটা অক্ষরও। সুতরাং যদি সত্যিকারের "\" এর সাথে মেলে তবে \ ব্যবহার করা যেতে পারেঃ

    নিয়মিত অভিব্যক্তিঃ a\b মেলে যাওয়া পাঠ্যঃ a\b a\b a[[b ম্যাচিংয়ের ফলাফলঃ a\ba\ba[[b

  • ফাঁকা অক্ষর

    কখনও কখনও আপনি এমন ফাঁকা অক্ষরগুলির সাথে মেলে যেতে পারেন যা পাঠ্যের মধ্যে মুদ্রণযোগ্য নয়। উদাহরণস্বরূপ, আপনি সমস্ত ট্যাব অক্ষর বা সমস্ত প্রতিস্থাপন অক্ষর খুঁজে পেতে চান। আপনি নীচের টেবিলের বিশেষ উপ-অক্ষরগুলি ব্যবহার করতে পারেনঃ

    img

    উদাহরণস্বরূপ, \r\n একটি ফরোয়ার্ড ওভারলাইন সমন্বয়কে মেলে, যা উইন্ডোজে একটি ফাইলের ওভারলাইনকে নির্দেশ করে। লিনাক্স এবং ইউনিক্স সিস্টেমে, শুধুমাত্র \n ব্যবহার করা প্রয়োজন।

  • নির্দিষ্ট চরিত্রের ধরন মেলে

    কিছু বিশেষ মেটাঅক্ষর রয়েছে যা সাধারণভাবে ব্যবহৃত অক্ষর সেটগুলির সাথে মেলে। এই মেটাঅক্ষরগুলিকে মেলে এমন অক্ষর শ্রেণী বলা হয়। আপনি এগুলি ব্যবহার করতে সুবিধাজনক খুঁজে পাবেন।

    সংখ্যা বা অ-সংখ্যার সাথে মেলে উপরে বলা হয়েছে, [০-৯] সমস্ত সংখ্যা মেলে। যদি আপনি কোনও সংখ্যা মেলে না চান তবে আপনি [^0-9] ব্যবহার করতে পারেন। নীচের টেবিলে সংখ্যা এবং অ-সংখ্যা শ্রেণীর উপ-অক্ষর তালিকাভুক্ত করা হয়েছেঃ

    img

    নিয়মিত অভিব্যক্তিঃ c\dt মেলেনি পাঠ্যঃ cat c2t czt c9t ম্যাচিংয়ের ফলাফলঃ catc2tcztc9t

    নিয়মিত এক্সপ্রেশনঃ c\Dt মেলেনি পাঠ্যঃ cat c2t czt c9t ম্যাচিংয়ের ফলাফলঃcatc2tcztc9t বর্ণিক এবং অ-বর্ণিক অক্ষরের সাথে মেলে আরেকটি সাধারণ ক্লাস মেট্রো অক্ষর হল \w এবং \W:

    img

    নিয়মিত এক্সপ্রেশনঃ c\wt মেলে পাঠ্যঃ cat c2t czt c-t c\t ম্যাচিংয়ের ফলাফলঃcat c2tc-t c\ t

    নিয়মিত এক্সপ্রেশনঃ c\Wt মেলে পাঠ্যঃ cat c2t c-t c\t মেলেঃ cat c2tc-t c\tফাঁকা এবং অ-ফাঁকা মিল শেষ ম্যাচিং ক্লাসটি হ'ল ফাঁকা ক্লাসঃ

    img

    নিয়মিত অভিব্যক্তিঃ c\st মেলে পাঠ্যঃ cat c t c2t c \ t ম্যাচিংয়ের ফলাফলঃ catc tc2t c\ t

    নিয়মিত এক্সপ্রেশনঃ c\St মেলে পাঠ্যঃ cat c t c2t c \ t ম্যাচিংয়ের ফলাফলঃcatc tc2t c\t

  • এক বা একাধিক অক্ষরের সাথে মেলে

    + মেটা অক্ষর এক বা একাধিক অক্ষরের সাথে মেলে। উদাহরণস্বরূপ, a "a" এর সাথে মেলে এবং a + এক বা একাধিক "a" এর সাথে মেলে।

    ক্যাট মেলে না পাঠ্যঃ ct cat caat caaat ম্যাচিংয়ের ফলাফলঃ ctcatকাত কাত

    আনুষ্ঠানিক অভিব্যক্তিঃ ca+t মেলে না পাঠ্যঃ ct cat caat caaat ম্যাচিংয়ের ফলাফলঃ ctcat caat caaatযখন + অক্ষর সেট ব্যবহার করা হয়, তখন + চিহ্নটি সেটের বাইরে রাখা প্রয়োজনঃ

    নিয়মিত অভিব্যক্তিঃ c[0-9] + t মেলে না পাঠ্যঃ ct c0t cat c123t ম্যাচিংয়ের ফলাফলঃ ctc0tবিড়ালc123tবিশ্লেষণঃ c[0-9]+t একটি স্ট্রিং যা "c দিয়ে শুরু হয় এবং t দিয়ে শেষ হয়, যার মাঝখানে এক বা একাধিক সংখ্যা রয়েছে" ।

    অবশ্যই, [০-৯+] একটি বৈধ নিয়মিত অভিব্যক্তি, কিন্তু এটি একটি অক্ষর সেট বোঝায় যা "০" - "৯" এবং "+" চিহ্নগুলি ধারণ করে।

    সাধারণভাবে,. এবং + এর মতো মেটা অক্ষরগুলি যখন অক্ষর গোষ্ঠীগুলির জন্য ব্যবহৃত হয় তখন আক্ষরিক অর্থ হিসাবে ব্যবহৃত হয়, তাই এটির রূপান্তর করার দরকার নেই। তবে এটির রূপান্তর করা ঠিক আছে, তাই,[0-9+] এবং [0-9+] একই কাজ করে।

    দ্রষ্টব্যঃ + হল একটি মেটা অক্ষর, "+" এর সাথে মেলে এমন একটি রূপান্তর +// ব্যবহার করা প্রয়োজন।

  • শূন্য বা তার বেশি অক্ষরের সাথে মেলে

    যদি আপনি শূন্য বা তার বেশি অক্ষর মেলে ব্যবহার করতে চান তবে আপনি * মেটা অক্ষরটি ব্যবহার করতে পারেন।

    আনুষ্ঠানিক অভিব্যক্তিঃ ca*t মেলে না লেখাঃ ct cat caat cbt ম্যাচিংয়ের ফলাফলঃct cat caatcbt দ্রষ্টব্যঃ* চিহ্নগুলি মেটা অক্ষর। * এর সাথে মেলে এমন "*" এর জন্য একটি রূপান্তর প্রয়োজন।*

  • একটি শূন্য বা একটি অক্ষরের সাথে মেলে

    ? শূন্য বা একটি অক্ষরের সাথে মেলে । সুতরাং,? পাঠ্যের মধ্যে একটি পছন্দসই অক্ষরের সাথে মেলে।

    নিয়মিত অভিব্যক্তিঃ ca?t মেলে না লেখাঃ ct cat caat cbt ম্যাচিংয়ের ফলাফলঃct catcaat cbt দ্রষ্টব্যঃ? চিহ্নটি একটি মেটা অক্ষর । "? " এর সাথে মিলে যাওয়ার জন্য, একটি রূপান্তর প্রয়োজন?

  • ম্যাচের সংখ্যা ব্যবহার করুন

    একটি আনুষ্ঠানিক অভিব্যক্তি ম্যাচের সংখ্যা নির্দিষ্ট করার অনুমতি দেয়। সংখ্যাটি { এবং } এর মধ্যে নির্দিষ্ট করা যেতে পারে। দ্রষ্টব্যঃ {এবং} এছাড়াও একটি মেটা অক্ষর, যা আক্ষরিক অর্থ ব্যবহার করার সময় রূপান্তর প্রয়োজন।

    সঠিক সংখ্যার মিল ম্যাচের সংখ্যা নির্ধারণ করতে, আপনি { এবং } এর মধ্যে একটি সংখ্যা লিখতে পারেন। উদাহরণস্বরূপ, {3} এর আগে 3 বার উপস্থিত হওয়া অক্ষর বা সেটগুলির সাথে মেলেঃ

    নিয়মিত অভিব্যক্তিঃ ca{3}t মেলে না লেখাঃ ct cat caaat cbt ম্যাচিংয়ের ফলাফলঃ ct catcaaatcbt কমপক্ষে কতবার মেলে আমরা কেবলমাত্র মেলে এমন ন্যূনতম মান নির্দিষ্ট করতে পারি। উদাহরণস্বরূপ, {2,} মানে ২ বা ততোধিক মেলেঃ

    নিয়মিত অভিব্যক্তিঃ ca{1,}t মেলে না লেখাঃ ct cat caaat cbt ম্যাচিংয়ের ফলাফলঃ ctcat caaatcbt সংখ্যাগত ব্যাসার্ধের মধ্যে মিল আমরা সর্বনিম্ন এবং সর্বাধিক মান ব্যবহার করেও মেলে এমন সংখ্যা নির্ধারণ করতে পারি। উদাহরণস্বরূপ, {2,3} মানে সর্বনিম্ন ২ বার মেলে এবং সর্বোচ্চ ৩ বার মেলে।

    স্বাভাবিক অভিব্যক্তিঃ ca{2,3}t মেলে না লেখাঃ ct cat caaat cbt ম্যাচিংয়ের ফলাফলঃ ct catcaaatcbt সুতরাং? এবং {0,1} এর ফাংশন একই + এবং {1,} এর ফাংশন একই ।

  • অ-অভিলাষী মেলে

    প্রথমত, নিচের উদাহরণগুলো দেখুনঃ

    আক্ষরিক অভিব্যক্তিঃ s.*g অনুবাদঃ xiao song xiao song ম্যাচিংয়ের ফলাফলঃ xiao song xiao song বিশ্লেষণঃ s.*g দুটি "song" এর সাথে মেলেনি, যেমনটি প্রত্যাশিত ছিল, তবে প্রথম "s" এবং শেষ "g" এর মধ্যে সমস্ত পাঠ্যের সাথে মেলে।

    এটি কারণ * এবং + উভয়ই লোভী মেলে। অর্থাৎ, নিয়মিত অভিব্যক্তি সর্বদা সর্বনিম্নের পরিবর্তে সর্বাধিক মেলে, যা ইচ্ছাকৃতভাবে ডিজাইন করা হয়েছে।

    কিন্তু আপনি যদি গরীব মেলে না চান তবে এই পরিমাপ শব্দগুলির জন্য অ-গরীব মেলে ব্যবহার করুন (যতটা সম্ভব অল্প অক্ষর মেলে) ।

    img

    হ্যাঁ?আপনি যদি এই উদাহরণটি পরিবর্তন করতে চান তবে আপনি *? ব্যবহার করতে পারেন।

    正则表达式:s.? জি মেলে না লেখাঃ xiao song xiao song ম্যাচিংয়ের ফলাফলঃ xiaosongসিয়োsong 分析:可以看到s.?g দুটি "Song" এর সাথে মেলে।

  • স্ট্রিং সীমানা নির্ধারণ করুন

    স্ট্রিংয়ের সীমানা মেলে এমন মেটা অক্ষর হল ^ এবং $, যা স্ট্রিংয়ের শুরু এবং শেষে ব্যবহৃত হয়।

    ↑ ব্যবহার করুনঃ

    আনুষ্ঠানিক অভিব্যক্তিঃ ^ xiao

    মেলেনি পাঠ্যঃ xiaoosong ম্যাচিংয়ের ফলাফলঃxiaoগান

    অনুরাগী চয়নঃ Axiaosong ম্যাচিংয়ের ফলাফলঃ Axiaosong বিশ্লেষণঃ ^xiao "xiao" দিয়ে শুরু হওয়া স্ট্রিংগুলির সাথে মেলে।

    $ ব্যবহার করেঃ

    আনুষ্ঠানিক অভিব্যক্তিঃ song$

    মেলেনি পাঠ্যঃ xiaoosong ম্যাচিংয়ের ফলাফলঃ xiaosong

    মেলেনি লেখাঃ xiaoosonga ম্যাচিংয়ের ফলাফলঃ জিয়াওসোঙ্গা বিশ্লেষণঃ song$ "song" দিয়ে শেষ হওয়া স্ট্রিংগুলির সাথে মেলে।

    শেয়ার করুনঃ

    আক্ষরিক অভিব্যক্তিঃ ^ [0-9a-zA-Z] {4,} $

    মেলেনি পাঠ্যঃ a1b234ABC ম্যাচিংয়ের ফলাফলঃa1b234ABC

    মেলে পাঠ্যঃ +a1b23=4ABC ম্যাচিংয়ের ফলাফলঃ +a1b23=4ABC বিশ্লেষণঃ ^[0-9a-zA-Z]{4,} $ একটি সংখ্যা বা অক্ষর দিয়ে গঠিত একটি ম্যাচ, এবং বিট বৃহত্তর চার বিট সমান স্ট্রিং;

    বিঃদ্রঃঃ যদি সেট শুরুতে থাকে তবে ^ নেগেটিভ; যদি সেটের বাইরে থাকে তবে স্ট্রিংয়ের শুরুতে এটি মেলে। আপনি [^0-9] এবং ^[0-9] এর পার্থক্যটি চেষ্টা করতে পারেন।

  • একাধিক লাইন মোড ব্যবহার করুন

    তবে √?m) বহু-রেখা মোড সক্ষম করা যায়। বহু-রেখা মোডে, নিয়মিত এক্সপ্রেশন ইঞ্জিনগুলি স্ট্রিংয়ের বিভাজক হিসাবে রূপান্তরিত লাইন চিহ্নগুলি ব্যবহার করে, ^ পাঠ্যের শুরু বা একটি লাইনের শুরুতে মেলে, এবং $ পাঠ্যের শেষ বা একটি লাইনের শেষে মেলে।

    এই উদাহরণটি সংশোধন করুনঃ

    নিয়মিত অভিব্যক্তিঃ ((?m) ^ [0-9a-zA-Z]{4,}$

    মেলেনি পাঠ্যঃ a1b234ABC +a1b23=4ABC ABC123456

    ম্যাচিংয়ের ফলাফলঃa1b234ABC+a1b23=4ABCABC123456বিশ্লেষণঃ ((?m) ^ [0-9a-zA-Z]{4,}$ প্রতি লাইনে ব্যবহৃত সংখ্যা বা অক্ষরগুলির সাথে মেলে, এবং সংখ্যাটি চারটি সংখ্যার সমান স্ট্রিংয়ের চেয়ে বড়।

    দ্রষ্টব্যঃ যদি বহু-রেখা মোড ব্যবহার করা হয়, তবে ((?m) অবশ্যই নিয়মিত অভিব্যক্তির শুরুতে স্থাপন করা উচিত। (?m) বেশিরভাগ রুটিন এক্সপ্রেশন বাস্তবায়নগুলিতে সমর্থিত নয়; কিছু রুটিন এক্সপ্রেশন বাস্তবায়নগুলিও \A মেলে স্ট্রিংয়ের শুরু এবং \Z মেলে স্ট্রিংয়ের শেষের জন্য সমর্থন করে। যদি সমর্থিত হয় তবে এই মেটাক্যারেক্টরগুলির কার্যকারিতা ^, $ এর সাথে একই হয়। তবে এই মেটাক্যারেক্টরগুলি একটি m সংশোধন ব্যবহার করতে পারে না, তাই এটি বহু-রেখা মোডে ব্যবহার করা যায় না।

এই নিবন্ধটি মৌলিক বিষয়গুলির সাথে শুরু করে, আপনি পরবর্তী নিবন্ধটি দেখতে পারেনঃ নিয়মিত অভিব্যক্তিগুলি পদ্ধতিগতভাবে শিখুন ((২): প্রগতিশীল প্রবন্ধ।

আইওএস_চোসঙ্কো থেকে পুনর্নির্দেশিত


আরো