রেজেক্সে $ / এবং $ between এর মধ্যে পার্থক্য কী?


11

শিরোনামটি নির্দেশ করে যে, $/এবং এর মধ্যে পার্থক্য কী ? তাদের সর্বদা একই মান হিসাবে উপস্থিত হয়:

my $text = "Hello world";

$text ~~ /(\w+) { say $/.raku } (\w+)/;
$text ~~ /(\w+) { say $¢.raku } (\w+)/;

উভয়ই একই মান সহ বস্তুর সাথে মিলিত হয় in একে অপরকে ব্যবহার করার যুক্তি কী?

উত্তর:


11

চলকটি $/সর্বাধিক সাম্প্রতিক ম্যাচকে বোঝায় যখন ভেরিয়েবলটি সাম্প্রতিকতম বহিরাগতের ম্যাচকে বোঝায়। উপরের মত বেশিরভাগ বুনিয়াদি রেগেক্সে, এটি এক এবং একই হতে পারে। তবে .rakuপদ্ধতির আউটপুট থেকে দেখা যায় , Matchবস্তুগুলিতে অন্যান্য Matchঅবজেক্ট থাকতে পারে (আপনি যখন ব্যবহার করবেন তখন $<foo>বা $1ক্যাপচারের জন্য আপনি এটি পাবেন )।

মনে করুন পরিবর্তে আমাদের একটি পরিমাণযুক্ত ক্যাপচারের সাথে নীচের রেজেক্স ছিল

/ ab (cd { say $¢.from, " ", $¢.to } ) + /

এবং দৌড়েছে এটি যদি "abcdcdcd" এর সাথে মিলে যায় তবে নিম্নলিখিত ফলাফলটি দেখবে:

0 2
0 4
0 6

কিন্তু যদি আমরা ব্যবহার থেকে পরিবর্তন করতে $/, আমরা একটি ভিন্ন ফলাফলের পাবেন:

2 2
4 4
6 6

( .toমনে হচ্ছে কিছুটা দূরে থাকার কারণটি হ'ল এটি .pos— এবং - ক্যাপচার ব্লকের সমাপ্তি অবধি আপডেট হয় না))

অন্য কথায়, হবে সবসময় কি আপনার চূড়ান্ত ম্যাচ বস্তু (অর্থাত, হতে হবে পড়ুন $final = $text ~~ $regexযেমন তোমার পরে উপরোক্ত উদাহরণের সমাপ্ত করিয়া হবে পূর্ণ ম্যাচ তাই আপনি ঠিক Regex এক জটিল ক্যাপচার গাছ ভিতরে তর্ক করতে পারেন), আপনি শুধু পারা কি $¢[0]প্রথম ম্যাচে উল্লেখ করতে $¢[1]দ্বিতীয়, ইত্যাদি

একটি রেজেক্স কোড ব্লকের অভ্যন্তরে, $/সর্বাধিক তাত্ক্ষণিক ম্যাচটি উল্লেখ করবে। উপরের ক্ষেত্রে, এটি হ'ল ভিতরে থাকা ( )এবং এটি অন্য ম্যাচগুলি, না মিলের মূল শুরু: ( )ব্লকের জন্য কেবল শুরু for সুতরাং আরও জটিল রেগেক্স দিন:

/ a $<foo>=(b $<bar>=(c)+ )+ d /

আমরা fooটোকেনের সমস্তটি of using ব্যবহার করে যে কোনও সময়ে অ্যাক্সেস করতে পারি $¢<foo>। আমরা ব্যবহার করে barপ্রদত্ত কোনও টোকেন অ্যাক্সেস করতে পারি । যদি আমরা এর ক্যাপচারের অভ্যন্তরে কোনও কোড ব্লক প্রবেশ করি , এটি ব্যবহার করে টোকেন অ্যাক্সেস করতে সক্ষম হবে বা , তবে এটি অন্যগুলিতে অ্যাক্সেস করতে সক্ষম হবে না ।foo$¢<foo>[0]<bar>foobar$<bar>$/<bar>foo


1
OHHH! আমি ডকটির "ব্যাখ্যার মধ্যে মূল পার্থক্য $/এবং স্কোপটি ব্যাখ্যা করেছি: পরবর্তীটির কেবলমাত্র রেজেক্সের অভ্যন্তরে একটি মান আছে" এর অর্থ নিছক একটি অনুসন্ধানী ট্রেস ছিল, ঠিক তেমনই Cursor। আমি যখন আপনার উত্তরটি পড়ি তখন আমি ভেবেছিলাম যে $*TOPআমি কি সম্ভাব্য উন্নতিতে তৈরি করেছি? আমার উত্তর বিভাগে এসও "কেন / কীভাবে ক্যাপচার গ্রুপগুলির সাথে পুনরাবৃত্তি সালিসী চরিত্রের মিলের জন্য অতিরিক্ত পরিবর্তনশীল প্রয়োজন?" কিন্তু আমার প্রচেষ্টা প্রতিস্থাপন $*TOPসঙ্গে ব্যর্থ হয়েছে। আপনি কি উত্তর আমার বক্তব্য বুঝতে পারি? আপনি এটি কাজ করতে পারেন?
রায়ফ

Raiph: তাই ব্যাকরণ এ, প্রতিটি টোকেন জন্য, নতুন হয়ে উঠছে তাই আপনি বলার আছে চাই $*TOP := $¢মধ্যে TOPটোকেন কিন্তু যে জন্য প্রয়োজন পরিত্রাণ পেতে না $*TOPঅবশ্যই Var। আমি সম্মত হই যে শীর্ষ স্তরের ম্যাচগুলি উল্লেখ করতে সক্ষম হওয়া দুর্দান্ত হবে esome সমস্যাটি হ'ল চূড়ান্তভাবে, এখনও আপনি সনাক্ত করতে পারেন: যখন অবস্থানগত / হ্যাশ ম্যাচ অবজেক্টে পোস্ট হয়। প্রতি টোকেন করা - যা ব্যবহার করার সময় ফলাফল সংজ্ঞায়য় পোস্টের সাথে সাথে এর এনক্লোজিং { }ব্লকের মুখোমুখি হওয়ার সাথে সাথে হবে।
user0721090601

আমার কাছে মজার বিষয়টি হ'ল বিকাশের ক্ষেত্রে Binex, ম্যাচের ফলাফলগুলি সাথে সাথে দেখা করার সাথে সাথে পোস্ট করার জন্য আমি কমপিটেশনালভাবে এর চেয়ে খারাপ কিছু পাইনি। দিনের শেষে, আপনি কোনও ক্যাশেড তালিকা / হ্যাশটিতে চাপ দিচ্ছেন / পপ করছেন, বা আপনি ম্যাচের তালিকাগুলি / হ্যাশটিতে চাপ / পপিং করছেন। তবে, কিছুটা অভ্যন্তরীণ গতি বাড়তে পারে আমি এলটিএম এর ব্যবহার সম্পর্কে অবগত নই যা সম্ভবত এটির মূল অংশে রয়েছে ( { }এলটিএমের উদ্দেশ্যে একটি টোকেনকে সরিয়ে দেয়, এবং এর চেয়ে চালানো / পরীক্ষার সম্ভাবনা বেশি থাকে) একটি |
গোষ্ঠীকরণের

আহহহ। আমি উপসংহারে ঝাঁপিয়েছিলাম গতিশীল ছিল, এবং যখন এটি কাজ না করে তখন অবাক হয়েছিল। কিন্তু পেনি এখন হ্রাস পেয়েছে যে এটি যুক্তিযুক্ত, যেমন আমি "বহিরাগত" শব্দটি আপনার ব্যবহারের বিষয়ে অনুমান করতে পারতাম এবং প্রতিটি বিধি শুরু করার পরে আপনি যেমন ব্যাখ্যা করেছেন, সেটাতো প্রতিষ্ঠিত হয়েছে।
রায়ফ

সুতরাং, আইইউক, কোনও নিয়মের শুরুতে, একটি নতুন ম্যাচ অবজেক্ট তৈরি করা হয়েছে যা মূল ইনপুট স্ট্রিংয়ের মধ্যে ম্যাচিং ইঞ্জিনের কার্সার অবস্থানটি রেকর্ড করে, তবে অন্যথায় খালি। (ডান?) তারপরে এবং $/একই বস্তুর সাথে আবদ্ধ, যথা এই নতুন ম্যাচ অবজেক্ট, যা এই নিয়মের সাথে কী মিলছে এবং ক্যাপচারগুলি এটি অগ্রগতির সাথে রেকর্ড করবে। তারপরে, ম্যাচিংয়ের অগ্রগতির সাথে সাথে এই সামগ্রিক ম্যাচের অবজেক্টের সাথে আবদ্ধ থাকে, $/যখনই প্রতিবার নতুন ম্যাচ অবজেক্ট তৈরি হয়ে যায় তা রিবাউন্ড হয়, সুতরাং এটি সর্বদা আপনার সামঞ্জস্য অনুসারে, সাম্প্রতিকতম ম্যাচের অবজেক্টের সাথে মিল রাখে। রাইট?
রায়ফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.