ইংরেজিফরাসিস্প্যানিশ

অনওয়ার্কস ফেভিকন

perlfaq6 - ক্লাউডে অনলাইন

উবুন্টু অনলাইন, ফেডোরা অনলাইন, উইন্ডোজ অনলাইন এমুলেটর বা MAC OS অনলাইন এমুলেটরের মাধ্যমে OnWorks ফ্রি হোস্টিং প্রদানকারীতে perlfaq6 চালান

এটি হল perlfaq6 কমান্ড যা আমাদের একাধিক বিনামূল্যের অনলাইন ওয়ার্কস্টেশন যেমন উবুন্টু অনলাইন, ফেডোরা অনলাইন, উইন্ডোজ অনলাইন এমুলেটর বা MAC OS অনলাইন এমুলেটর ব্যবহার করে OnWorks ফ্রি হোস্টিং প্রদানকারীতে চালানো যেতে পারে।

কার্যক্রম:

NAME এর


perlfaq6 - নিয়মিত অভিব্যক্তি

সংস্করণ


5.021009 সংস্করণ

বর্ণনাঃ


এই বিভাগটি আশ্চর্যজনকভাবে ছোট কারণ বাকি প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী উত্তর দিয়ে পরিপূর্ণ
নিয়মিত অভিব্যক্তি জড়িত। উদাহরণস্বরূপ, একটি URL ডিকোড করা এবং কিছু কিনা তা পরীক্ষা করা
একটি সংখ্যা রেগুলার এক্সপ্রেশন দিয়ে পরিচালনা করা যেতে পারে, কিন্তু সেই উত্তরগুলি অন্য কোথাও পাওয়া যায়
এই নথিতে (perlfaq9-এ: "আমি কীভাবে ওয়েবে সেই %-এনকোডিংগুলিকে ডিকোড বা তৈরি করব"
এবং perlfaq4: "একটি স্কেলার একটি সংখ্যা/সম্পূর্ণ/পূর্ণসংখ্যা/ফ্লোট কিনা তা আমি কীভাবে নির্ধারণ করব", হতে হবে
সুনির্দিষ্ট)।

কিভাবে পারেন I আশা থেকে ব্যবহার নিয়মিত এক্সপ্রেশন ছাড়া তৈরি অবহেলিত এবং অপরিবর্তিত কোড?
তিনটি কৌশল নিয়মিত অভিব্যক্তি বজায় রাখতে এবং বোধগম্য করতে পারে।

Regex এর বাইরে মন্তব্য
সাধারণ পার্ল মন্তব্য ব্যবহার করে আপনি কী করছেন এবং আপনি কীভাবে তা করছেন তা বর্ণনা করুন।

# লাইনটিকে প্রথম শব্দে পরিণত করুন, একটি কোলন এবং
বাকি লাইনে # অক্ষরের সংখ্যা
s/^(\w+)(.*)/ lc($1)। ":" দৈর্ঘ্য($2) /মেগ;

Regex ভিতরে মন্তব্য
"/x" সংশোধক একটি রেজেক্স প্যাটার্নে হোয়াইটস্পেস উপেক্ষা করার কারণ হয় (এ ছাড়া
অক্ষর শ্রেণী এবং কয়েকটি অন্যান্য জায়গা), এবং আপনাকে সাধারণ মন্তব্য ব্যবহার করার অনুমতি দেয়
সেখানে খুব. আপনি যেমন কল্পনা করতে পারেন, হোয়াইটস্পেস এবং মন্তব্যগুলি অনেক সাহায্য করে।

"/x" আপনাকে এটি চালু করতে দেয়:

s{<(?:[^>'"]*|".*?"|'.*?')+>}{}gs;

এর মধ্যে:

s{ < # খোলার কোণ বন্ধনী
(?: # নন-ব্যাকরেফিং গ্রুপিং প্যারেন
[^>'"] * # 0 বা তার বেশি জিনিস যা > বা ' বা " নয়
| # অথবা
"।*?" # দ্বিগুণ উদ্ধৃতিগুলির মধ্যে একটি বিভাগ (কঁজর মিল)
| # অথবা
'।*?' # একক উদ্ধৃতিগুলির মধ্যে একটি বিভাগ (কঁজর মিল)
) + # সব এক বা একাধিক বার ঘটছে
> # সমাপ্তি কোণ বন্ধনী
{}gsx; # কিছুই না দিয়ে প্রতিস্থাপন করুন, অর্থাৎ মুছুন

এটি এখনও গদ্যের মতো এতটা স্পষ্ট নয়, তবে এটি বর্ণনা করার জন্য খুব দরকারী
প্যাটার্নের প্রতিটি অংশের অর্থ।

বিভিন্ন ডিলিমিটার
যদিও আমরা সাধারণত নিদর্শনগুলিকে "/" অক্ষর দিয়ে সীমাবদ্ধ করা বলে মনে করি, তারা তা করতে পারে
প্রায় কোনো অক্ষর দ্বারা সীমাবদ্ধ করা. perlre এই বর্ণনা. উদাহরণস্বরূপ, "s///"
উপরে সীমাবদ্ধকারী হিসাবে ধনুর্বন্ধনী ব্যবহার করে। অন্য ডিলিমিটার নির্বাচন করা উদ্ধৃতি এড়াতে পারে
প্যাটার্নের মধ্যে ডিলিমিটার:

s/\, / usr\/স্থানীয়/\, / usr\/শেয়ার/জি; # খারাপ ডিলিমিটার পছন্দ
s#, / Usr / স্থানীয়#/ usr / শেয়ার#g; # উত্তম

যৌক্তিকভাবে জোড়া সীমাবদ্ধতা ব্যবহার করা আরও বেশি পাঠযোগ্য হতে পারে:

s{/ মার্কিন / স্থানীয় /}{/ usr / শেয়ার}g; # এখনও ভাল

আমি জমিদারি ব্যাধি ম্যাচিং শেষ অধিক চেয়ে এক লাইন। কী ভুল?
হয় আপনি যে স্ট্রিংটি দেখছেন তাতে একের বেশি লাইন নেই (সম্ভবত), অথবা
অন্যথায় আপনি আপনার প্যাটার্নে সঠিক সংশোধক(গুলি) ব্যবহার করছেন না (সম্ভবত)।

একটি স্ট্রিং মধ্যে মাল্টিলাইন তথ্য পেতে অনেক উপায় আছে. যদি আপনি এটি ঘটতে চান
স্বয়ংক্রিয়ভাবে ইনপুট পড়ার সময়, আপনি $/ (সম্ভবত অনুচ্ছেদের জন্য '' তে সেট করতে চান বা
পুরো ফাইলের জন্য "undef") আপনাকে একবারে একাধিক লাইন পড়ার অনুমতি দেয়।

আপনি "/s" এবং "/m" (বা উভয়) কোনটি ব্যবহার করতে চান তা নির্ধারণ করতে আপনাকে সাহায্য করতে perlre পড়ুন:
"/s" ডটকে নতুন লাইন অন্তর্ভুক্ত করার অনুমতি দেয় এবং "/m" ক্যারেট এবং ডলারকে a এর পাশে মেলাতে দেয়
newline, শুধু স্ট্রিং শেষে নয়। আপনি নিশ্চিত করতে হবে যে আপনি আসলে করেছি
সেখানে একটি মাল্টিলাইন স্ট্রিং পেয়েছি।

উদাহরণস্বরূপ, এই প্রোগ্রামটি ডুপ্লিকেট শব্দ শনাক্ত করে, এমনকি যখন তারা লাইন বিরতি দেয় (কিন্তু
অনুচ্ছেদ নয়)। এই উদাহরণের জন্য, আমাদের "/s" দরকার নেই কারণ আমরা a-তে ডট ব্যবহার করছি না
রেগুলার এক্সপ্রেশন যে আমরা লাইন সীমানা অতিক্রম করতে চাই। আমাদের "/m" এর প্রয়োজন নেই কারণ
আমরা চাই না নতুন লাইনের পাশে রেকর্ডের ভিতরে যেকোন সময় ক্যারেট বা ডলার মিলুক।
কিন্তু এটা অপরিহার্য যে $/ ডিফল্ট ব্যতীত অন্য কিছুতে সেট করা, অন্যথায় আমরা তা করব না
আসলে কখনও একটি মাল্টিলাইন রেকর্ড পড়া আছে.

$/ = ''; # পুরো অনুচ্ছেদ পড়ুন, শুধু একটি লাইন নয়
যখন ( <> ) {
যখন ( /\b([\w'-]+)(\s+\g1)+\b/gi ) { # শব্দ শুরু হয় আলফা
প্রিন্ট "অনুচ্ছেদ $1 এ $XNUMX।\n";
}
}

এখানে কিছু কোড রয়েছে যা "থেকে" দিয়ে শুরু হওয়া বাক্যগুলি খুঁজে পায় (যা দ্বারা ম্যাঙ্গল করা হবে
অনেক মেইলার):

$/ = ''; # পুরো অনুচ্ছেদ পড়ুন, শুধু একটি লাইন নয়
যখন ( <> ) {
যখন ( /^From /gm) { # /m ^ ম্যাচ করে \n এর পাশে
প্রিন্ট "অনুচ্ছেদ থেকে অগ্রণী $.\n";
}
}

এখানে কোড যা একটি অনুচ্ছেদে START এবং END এর মধ্যে সবকিছু খুঁজে পায়:

undef $/; # পুরো ফাইলে পড়ুন, শুধু একটি লাইন বা অনুচ্ছেদ নয়
যখন ( <> ) {
যখন ( /START(.*?)END/sgm ) { # /s করে। ক্রস লাইন সীমানা
"$1\n" প্রিন্ট করুন;
}
}

কিভাবে পারেন I টান বাইরে লাইন মধ্যে দুই নিদর্শন যে হয় নিজেদের on বিভিন্ন লাইন?
আপনি পার্লের কিছুটা বহিরাগত ".." অপারেটর ব্যবহার করতে পারেন (পারলপে নথিভুক্ত):

perl -ne 'প্রিন্ট যদি /START/ .. /END/' file1 file2 ...

আপনি যদি পাঠ্য চান এবং লাইন না চান তবে আপনি ব্যবহার করবেন

perl -0777 -ne 'প্রিন্ট করা "$1\n" যখন /START(.*?)END/gs' file1 file2 ...

কিন্তু আপনি যদি "START" থেকে "END" এর নেস্টেড ঘটনাগুলি চান তবে আপনি এর বিরুদ্ধে দৌড়াবেন৷
ভারসাম্যপূর্ণ পাঠ্য মেলাতে এই বিভাগে প্রশ্নে বর্ণিত সমস্যা।

এখানে ".." ব্যবহার করার আরেকটি উদাহরণ:

যখন (<>) {
আমার $in_header = 1 .. /^$/;
আমার $in_body = /^$/ .. eof;
# এখন তাদের মধ্যে বেছে নিন
} চালিয়ে যান {
$ = 0 যদি eof; # ঠিক করুন $।
}

কিভাবে do I ম্যাচ এক্সএমএল, এইচটিএমএল, or অন্যান্য বাজে অরুপ কিছু সঙ্গে a regex?
রেজেক্স ব্যবহার করবেন না। একটি মডিউল ব্যবহার করুন এবং রেগুলার এক্সপ্রেশন ভুলে যান। দ্য
XML::LibXML, HTML::TokeParser এবং HTML::TreeBuilder মডিউল ভাল শুরু, যদিও প্রতিটি
নেমস্পেসে নির্দিষ্ট কাজের জন্য বিশেষায়িত অন্যান্য পার্সিং মডিউল রয়েছে এবং এর বিভিন্ন উপায় রয়েছে
এটা করছি. CPAN অনুসন্ধানে শুরু করুন (http://metacpan.org/> ) এবং সব কাজে আশ্চর্য
লোকেরা ইতিমধ্যে আপনার জন্য করেছে! :)

I করা a নিয়মিত অভিব্যক্তি মধ্যে $/ কিন্তু it করেনি হবে। কী ভুল?
$/ একটি স্ট্রিং হতে হবে। আপনার যদি সত্যিই এটি করার প্রয়োজন হয় তবে আপনি এই উদাহরণগুলি ব্যবহার করতে পারেন।

যদি আপনার কাছে ফাইল::স্ট্রিম থাকে তবে এটি সহজ।

ফাইল::স্ট্রিম ব্যবহার করুন;

আমার $স্ট্রিম = ফাইল::স্ট্রিম->নতুন(
$filehandle,
বিভাজক => qr/\s*,\s*/,
);

<$stream> থাকাকালীন "$_\n" প্রিন্ট করুন;

যদি আপনার কাছে File::Stream না থাকে, তাহলে আপনাকে একটু বেশি কাজ করতে হবে।

আপনি ক্রমাগত একটি বাফার যোগ করতে sysread এর চার-আর্গুমেন্ট ফর্ম ব্যবহার করতে পারেন। তোমার পরে
বাফার যোগ করুন, আপনি একটি সম্পূর্ণ লাইন আছে কিনা তা পরীক্ষা করুন (আপনার নিয়মিত অভিব্যক্তি ব্যবহার করে)।

স্থানীয় $_ = "";
যখন (sysread FH, $_, 8192, দৈর্ঘ্য ) {
যখন(s/^((?s).*?)your_pattern// ) {
আমার $রেকর্ড = $1;
# এখানে জিনিস না.
}
}

আপনি সি পতাকা এবং \G অ্যাঙ্কর ব্যবহার করে foreach এবং একটি ম্যাচের সাথে একই জিনিস করতে পারেন, যদি
শেষ পর্যন্ত আপনার সম্পূর্ণ ফাইলটি মেমরিতে থাকাতে আপনি কিছু মনে করবেন না।

স্থানীয় $_ = "";
যখন (sysread FH, $_, 8192, দৈর্ঘ্য ) {
আমার $রেকর্ড ( m/\G((?s).*?)your_pattern/gc ) {
# এখানে জিনিস না.
}
substr( $_, 0, pos ) = "" যদি pos হয়;
}

কিভাবে do I বিকল্প কেস-সংবেদনশীলভাবে on দ্য LHS যখন সংরক্ষণ করা কেস on দ্য আরএইচএস?
এখানে ল্যারি রোজলারের একটি সুন্দর পার্লিশ সমাধান। এটি বিটওয়াইজ xor অন বৈশিষ্ট্যগুলিকে কাজে লাগায়
ASCII স্ট্রিং।

$_= "এটি একটি TEsT কেস";

$old = 'পরীক্ষা';
$new = 'সাফল্য';

s{(\Q$old\E)}
{ uc $নতুন | (uc $1 ^ $1)।
(uc(substr $1, -1) ^ substr $1, -1) x
(দৈর্ঘ্য($নতুন) - দৈর্ঘ্য $1)
} যেমন;

ছাপা;

এবং এখানে এটি একটি সাবরুটিন হিসাবে, উপরের অনুসারে মডেল করা হয়েছে:

উপ সংরক্ষণ_কেস {
আমার ($পুরানো, $নতুন) = @_;
আমার $মাস্ক = uc $old ^ $old;

uc $নতুন | $মাস্ক।
substr($mask, -1) x (দৈর্ঘ্য($new) - দৈর্ঘ্য($old))
}

$string = "এটি একটি TEsT কেস";
$স্ট্রিং =~ s/(পরীক্ষা)/প্রিজারভ_কেস($1, "সফল")/ইজি;
"$string\n" প্রিন্ট করুন;

এই প্রিন্ট:

এটি একটি সফল কেস

বিকল্প হিসাবে, প্রতিস্থাপন শব্দের কেসটি যদি এর চেয়ে দীর্ঘ হয়
আসল, আপনি জেফ পিনিয়ান দ্বারা এই কোডটি ব্যবহার করতে পারেন:

উপ সংরক্ষণ_কেস {
আমার ($ থেকে, $ থেকে) = @_;
আমার ($lf, $lt) = মানচিত্রের দৈর্ঘ্য, @_;

যদি ($lt < $lf) { $from = substr $from, 0, $lt }
অন্য { $from .= substr $to, $lf }

uc $to | ($ থেকে ^ uc $ থেকে);
}

এটি বাক্যটিকে "এটি একটি সফল মামলা" এ পরিবর্তন করে।

শুধু দেখানোর জন্য যে সি প্রোগ্রামাররা যেকোনো প্রোগ্রামিং ভাষায় সি লিখতে পারে, যদি আপনি পছন্দ করেন a
আরও সি-এর মতো সমাধান, নিম্নলিখিত স্ক্রিপ্টটি প্রতিস্থাপনের ক্ষেত্রে একই রকম করে তোলে,
অক্ষর দ্বারা অক্ষর, মূল হিসাবে. (এটি এর চেয়ে প্রায় 240% ধীর গতিতে চালানোও ঘটে
পার্লিশ সলিউশন চলে।) যদি প্রতিস্থাপনে স্ট্রিং এর চেয়ে বেশি অক্ষর থাকে
প্রতিস্থাপিত, শেষ অক্ষরের ক্ষেত্রে বাকি প্রতিস্থাপনের জন্য ব্যবহৃত হয়।

# নাথান টর্কিংটনের আসল, জেফরি ফ্রিডল ম্যাসেজ করেছেন
#
sub preserve_case
{
আমার ($পুরানো, $নতুন) = @_;
আমার $state = 0; # 0 = কোন পরিবর্তন নেই; 1 = lc; 2 = uc
আমার ($i, $oldlen, $newlen, $c) = (0, length($old), length($new));
আমার $len = $oldlen < $newlen? $oldlen : $newlen;

($i = 0; $i < $len; $i++) {
যদি ($c = substr($old, $i, 1), $c =~ /[\W\d_]/) {
$state = 0;
} elsif (lc $c eq $c) {
substr($new, $i, 1) = lc(substr($new, $i, 1));
$state = 1;
} অন্য {
substr($new, $i, 1) = uc(substr($new, $i, 1));
$state = 2;
}
}
# যেকোনও নতুনের সাথে শেষ করুন (যখন নতুন পুরানো থেকে দীর্ঘ হয়)
যদি ($newlen > $oldlen) {
যদি ($state == 1) {
substr($new, $oldlen) = lc(substr($new, $oldlen));
} elsif ($state == 2) {
substr($new, $oldlen) = uc(substr($new, $oldlen));
}
}
ফেরত $নতুন;
}

কিভাবে পারেন I করা "\w" ম্যাচ জাতীয় চরিত্র সেট?
রাখুন "স্থানীয় ব্যবহার করুন;" আপনার স্ক্রিপ্টে। \w ক্যারেক্টার ক্লাস বর্তমান লোকেল থেকে নেওয়া হয়েছে।

বিস্তারিত জানার জন্য perllocale দেখুন.

কিভাবে পারেন I ম্যাচ a লোকেল-স্মার্ট সংস্করণ of "/[a-zA-Z]/"?
আপনি perlre তে নথিভুক্ত POSIX অক্ষর ক্লাস সিনট্যাক্স "/[[:alpha:]/" ব্যবহার করতে পারেন।

আপনি কোন লোকেলেই থাকুন না কেন, বর্ণানুক্রমিক অক্ষরগুলি হল \w এর অক্ষর৷
অঙ্ক এবং আন্ডারস্কোর ছাড়া। রেজেক্স হিসাবে, এটি দেখতে "/[^\W\d_]/" এর মতো। এর
পরিপূরক, অ-বর্ণমালা, তারপর সংখ্যা এবং সঙ্গে \W এর সবকিছু
আন্ডারস্কোর, বা "/[\W\d_]/"।

কিভাবে পারেন I উদ্ধৃতি a পরিবর্তনশীল থেকে ব্যবহার in a regex?
পার্ল পার্সার রেগুলার এক্সপ্রেশনে $variable এবং @variable রেফারেন্স প্রসারিত করবে
যদি না বিভেদক একটি একক উদ্ধৃতি হয়। মনে রাখবেন, খুব, যে ডান দিকে একটি
"s///" প্রতিস্থাপনকে একটি দ্বি-উদ্ধৃত স্ট্রিং হিসাবে বিবেচনা করা হয় (আরো বিশদ বিবরণের জন্য পার্লপ দেখুন)।
এছাড়াও মনে রাখবেন যে কোনও রেজেক্স বিশেষ অক্ষরগুলি কাজ করা হবে যদি না আপনি এর আগে থাকেন৷
\Q দিয়ে প্রতিস্থাপন। এখানে একটি উদাহরণ:

$string = "প্ল্যাসিডো পি. অক্টোপাস";
$regex = "P";

$string =~ s/$regex/Polyp/;
# $স্ট্রিং এখন "পলিপাসিডো পি. অক্টোপাস"

কারণ "." রেগুলার এক্সপ্রেশনে বিশেষ, এবং যে কোনো একক অক্ষরের সাথে মেলে
regex "P।" এখানে মিলেছে মূল স্ট্রিং মধ্যে.

"." এর বিশেষ অর্থ এড়াতে, আমরা "\Q" ব্যবহার করি:

$string = "প্ল্যাসিডো পি. অক্টোপাস";
$regex = "P";

$string =~ s/\Q$regex/Polyp/;
# $স্ট্রিং এখন "প্ল্যাসিডো পলিপ অক্টোপাস"

"\Q" ব্যবহারের ফলে রেজেক্সে <.> কে একটি নিয়মিত অক্ষর হিসাবে গণ্য করা হয়, যাতে
"পি।" একটি "P" এর সাথে একটি বিন্দুর সাথে মেলে।

কি is "/ও" সত্যিই জন্য?
(ব্রায়ান ডি ফয় দ্বারা অবদান)

রেগুলার এক্সপ্রেশনের জন্য "/o" বিকল্প (perlop এবং perlref-এ নথিভুক্ত) পার্লকে বলে
শুধুমাত্র একবার রেগুলার এক্সপ্রেশন কম্পাইল করুন। এটি শুধুমাত্র তখনই কার্যকর যখন প্যাটার্নটিতে a থাকে
পরিবর্তনশীল Perls 5.6 এবং পরে প্যাটার্ন পরিবর্তন না হলে এটি স্বয়ংক্রিয়ভাবে পরিচালনা করে।

যেহেতু ম্যাচ অপারেটর "m//", প্রতিস্থাপন অপারেটর "s///", এবং নিয়মিত
এক্সপ্রেশন কোটিং অপারেটর "qr//" হল ডাবল-কোটিশ কনস্ট্রাক্ট, আপনি ইন্টারপোলেট করতে পারেন
প্যাটার্ন মধ্যে ভেরিয়েবল. উত্তর দেখুন "আমি কিভাবে একটি ভেরিয়েবল ব্যবহার করার জন্য একটি উদ্ধৃত করতে পারি
regex?" আরো বিস্তারিত জানার জন্য।

এই উদাহরণটি যুক্তি তালিকা থেকে একটি নিয়মিত অভিব্যক্তি নেয় এবং এর লাইনগুলি প্রিন্ট করে
ইনপুট যা এর সাথে মেলে:

আমার $প্যাটার্ন = শিফট @ARGV;

যখন( <> ) {
মুদ্রণ যদি m/$pattern/;
}

5.6-এর আগের পার্লের সংস্করণগুলি প্রতিটি পুনরাবৃত্তির জন্য নিয়মিত অভিব্যক্তি পুনরায় কম্পাইল করবে,
এমনকি যদি $প্যাটার্ন পরিবর্তন না হয়। "/o" পার্লকে কম্পাইল করতে বলে এটি প্রতিরোধ করবে
প্যাটার্নটি প্রথমবার, তারপর পরবর্তী পুনরাবৃত্তির জন্য পুনরায় ব্যবহার করুন:

আমার $প্যাটার্ন = শিফট @ARGV;

যখন( <> ) {
m/$pattern/o থাকলে প্রিন্ট করুন; # পার্লের জন্য দরকারী < 5.6
}

5.6 এবং পরবর্তী সংস্করণে, পরিবর্তনশীল হলে পার্ল রেগুলার এক্সপ্রেশন পুনরায় কম্পাইল করবে না
পরিবর্তিত হয়নি, তাই আপনার সম্ভবত "/o" বিকল্পের প্রয়োজন নেই। এটা আঘাত না, কিন্তু এটা
সাহায্য করে না। আপনি যদি রেগুলার এক্সপ্রেশন কম্পাইল করতে পার্লের কোনো সংস্করণ চান
শুধুমাত্র একবার এমনকি যদি ভেরিয়েবল পরিবর্তন হয় (এইভাবে, শুধুমাত্র তার প্রাথমিক মান ব্যবহার করে), আপনি এখনও
"/o" প্রয়োজন।

আপনি পার্লের নিয়মিত এক্সপ্রেশন ইঞ্জিনটি নিজের জন্য যাচাই করতে কর্মক্ষেত্রে দেখতে পারেন যদি পার্ল হয়
একটি নিয়মিত অভিব্যক্তি পুনরায় কম্পাইল করা হচ্ছে। "ব্যবহার পুনরায় 'ডিবাগ'" প্রাগমা (পার্ল 5.005 এবং
পরে) বিস্তারিত দেখায়। 5.6 এর আগে পার্লস এর সাথে, আপনার "পুনরায়" রিপোর্ট করা উচিত যে এটি
প্রতিটি পুনরাবৃত্তিতে নিয়মিত অভিব্যক্তি কম্পাইল করা হচ্ছে। পার্ল 5.6 বা তার পরে, আপনার উচিত
প্রথম পুনরাবৃত্তির জন্য শুধুমাত্র "পুনরায়" রিপোর্ট দেখুন।

পুনরায় 'ডিবাগ' ব্যবহার করুন;

আমার $regex = 'পার্ল';
foreach ( qw (পার্ল জাভা রুবি পাইথন) ) {
প্রিন্ট STDERR "-" x 73, "\n";
প্রিন্ট STDERR "চেষ্টা করা হচ্ছে $_...\n";
STDERR প্রিন্ট করুন "\t$_ ভাল!\n" যদি m/$regex/;
}

কিভাবে do I ব্যবহার a নিয়মিত অভিব্যক্তি থেকে ফালা সি-স্টাইল মন্তব্য থেকে a ফাইল?
যদিও এটি আসলে করা যেতে পারে, এটি আপনার ভাবার চেয়ে অনেক কঠিন। উদাহরণস্বরূপ, এই
এক রৈখিক

perl -0777 -pe 's{/\*.*?\*/}{}gs' foo.c

অনেক ক্ষেত্রে কাজ করবে কিন্তু সব ক্ষেত্রে নয়। আপনি দেখেন, এটি নির্দিষ্ট ধরণের জন্য খুব সহজ-সরল
সি প্রোগ্রাম, বিশেষ করে, উদ্ধৃত স্ট্রিং মন্তব্য হতে প্রদর্শিত কি সঙ্গে যারা. জন্য
যে, আপনার এরকম কিছু দরকার, জেফরি ফ্রিডল দ্বারা তৈরি এবং পরে ফ্রেড দ্বারা পরিবর্তিত
কার্টিস

$/ = undef;
$_ = <>;
s#/\*[^*]*\*+([^/*][^*]*\*+)*/|("(\\.|[^"\\])*"|'( \\.|[^'\\])*'|[^/"'\\]*)#সংজ্ঞায়িত $2? $2 : ""#gse;
ছাপা;

এটি অবশ্যই, "/x" মডিফায়ার দিয়ে আরও স্পষ্টভাবে লেখা হতে পারে, সাদা স্থান যোগ করে
এবং মন্তব্য. ফ্রেড কার্টিসের সৌজন্যে এখানে এটি প্রসারিত হয়েছে।

s{
/\* ## /* ... */ মন্তব্যের শুরু
[^*]*\*+ ## অ-* এর পরে 1-বা-তার বেশি *'স
(
[^/*][^*]*\*+
)* ## 0-বা-আরও বেশি জিনিস যা / দিয়ে শুরু হয় না
## কিন্তু '*' দিয়ে শেষ করুন
/## শেষ /* ... */ মন্তব্য

| ## বা বিভিন্ন জিনিস যা মন্তব্য নয়:

(
" ## "..." স্ট্রিংয়ের শুরু
(
\\। ## পালিয়ে যাওয়া চর
| ## বা
[^"\\] ## না "\
)*
" ## "..." স্ট্রিংয়ের শেষ

| ## বা

' ## '...' স্ট্রিংয়ের শুরু
(
\\। ## পালিয়ে যাওয়া চর
| ## বা
[^'\\] ## না '\
)*
' ## '...' স্ট্রিংয়ের শেষ

| ## বা

. ## অন্য কিছু চর
[^/"'\\]* ## অক্ষর যা একটি মন্তব্য, স্ট্রিং বা এস্কেপ শুরু করে না
)
}{সংজ্ঞায়িত $2? $2 : ""}gxse;

একটি সামান্য পরিবর্তনও C++ মন্তব্যগুলিকে সরিয়ে দেয়, সম্ভবত একটি ব্যবহার করে একাধিক লাইন বিস্তৃত করে
ধারাবাহিকতা চরিত্র:

s#/\*[^*]*\*+([^/*][^*]*\*+)*/|//([^\\]|[^\n][\n]? )*?\n|("(\\.|[^"\\])*"|'(\\.|[^'\\])*'|[^/"'\\]*) #সংজ্ঞায়িত $3? $3 : ""#gse;

Can I ব্যবহার পার্ল নিয়মিত এক্সপ্রেশন থেকে ম্যাচ সুষম পাঠ্য?
(ব্রায়ান ডি ফয় দ্বারা অবদান)

আপনার প্রথম চেষ্টাটি সম্ভবত পাঠ্য::ব্যালেন্সড মডিউল হওয়া উচিত, যা পার্ল স্ট্যান্ডার্ডে রয়েছে
পার্ল 5.8 থেকে লাইব্রেরি। জটিল টেক্সট মোকাবেলা করার জন্য এটির বিভিন্ন ধরনের ফাংশন রয়েছে। দ্য
Regexp::সাধারণ মডিউল আপনি ব্যবহার করতে পারেন এমন ক্যানড প্যাটার্ন প্রদান করেও সাহায্য করতে পারে।

পার্ল 5.10 অনুযায়ী, আপনি রিকার্সিভ ব্যবহার করে রেগুলার এক্সপ্রেশনের সাথে সুষম টেক্সট মেলাতে পারেন
নিদর্শন পার্ল 5.10 এর আগে, আপনাকে পার্ল কোড ব্যবহার করার মতো বিভিন্ন কৌশল অবলম্বন করতে হয়েছিল
"(??{})" ক্রম।

এখানে একটি পুনরাবৃত্ত রেগুলার এক্সপ্রেশন ব্যবহার করে একটি উদাহরণ। লক্ষ্য হল সব ক্যাপচার করা
কোণ বন্ধনীর মধ্যে পাঠ্য, নেস্টেড কোণ বন্ধনীতে পাঠ্য সহ। এই নমুনা টেক্সট
দুটি "প্রধান" গোষ্ঠী রয়েছে: একটি দল যার এক স্তরের বাসা এবং একটি দল দুটি স্তরের
বাসা বাঁধা কোণ বন্ধনীতে মোট পাঁচটি গ্রুপ রয়েছে:

আমার কিছু আছে > এবং
>>
এবং এটাই.

ভারসাম্যপূর্ণ পাঠ্যের সাথে মেলে রেগুলার এক্সপ্রেশন দুটি নতুন (পার্ল 5.10) নিয়মিত ব্যবহার করে
অভিব্যক্তি বৈশিষ্ট্য। এই perlre মধ্যে আচ্ছাদিত করা হয় এবং এই উদাহরণ একটি পরিবর্তিত সংস্করণ
যে ডকুমেন্টেশন এক.

প্রথমত, যেকোন কোয়ান্টিফায়ারে নতুন অধিকারী "+" যোগ করলে দীর্ঘতম মিল পাওয়া যায় এবং
পিছনে না. এটি গুরুত্বপূর্ণ যেহেতু আপনি এর মাধ্যমে যেকোনো কোণ বন্ধনী পরিচালনা করতে চান
পুনরাবৃত্তি, ব্যাকট্র্যাকিং নয়। গ্রুপ "[^<>]++" এক বা একাধিক অ-কোণ বন্ধনী খুঁজে পায়
ব্যাকট্র্যাকিং ছাড়াই।

দ্বিতীয়ত, নতুন "(?PARNO)" প্রদত্ত বিশেষ ক্যাপচার গ্রুপের সাব-প্যাটার্নকে বোঝায়
"PARNO" দ্বারা। নিম্নলিখিত রেজেক্সে, প্রথম ক্যাপচার গ্রুপটি খুঁজে পায় (এবং মনে রাখে)
ভারসাম্যপূর্ণ পাঠ্য, এবং আপনার প্রথম বাফারের মধ্যে সেই একই প্যাটার্নটি অতিক্রম করতে হবে
নেস্টেড টেক্সট। যে পুনরাবৃত্ত অংশ. "(?1)" বাইরের ক্যাপচারে প্যাটার্ন ব্যবহার করে
regex এর একটি স্বাধীন অংশ হিসাবে গোষ্ঠী।

এটি সব একসাথে রাখা, আপনার আছে:

#!/usr/local/bin/perl5.10.0

আমার $স্ট্রিং =<<"এখানে";
আমার কিছু আছে > এবং
>>
এবং এটাই.
এখানে

আমার @groups = $স্ট্রিং =~ মি/
( # ক্যাপচার গ্রুপ 1 এর শুরু
< # একটি খোলার কোণ বন্ধনীর সাথে মেলে
(?:
[^<>]++ # এক বা একাধিক নন অ্যাঙ্গেল বন্ধনী, নন ব্যাকট্র্যাকিং
|
(?1) # পাওয়া গেছে < বা >, তাই গ্রুপ 1 ক্যাপচার করতে পুনরাবৃত্তি করুন
)*
> # একটি ক্লোজিং অ্যাঙ্গেল ব্র্যাকেটের সাথে মেলে
) # ক্যাপচার গ্রুপ 1 এর শেষ
/xg;

$" = "\n\t";
প্রিন্ট "পাওয়া গেছে:\n\t@groups\n";

আউটপুট দেখায় যে পার্ল দুটি প্রধান গ্রুপ খুঁজে পেয়েছে:

পাওয়া:
>
>>

একটু বাড়তি কাজের সাথে, আপনি কোণ বন্ধনীতে সমস্ত গ্রুপ পেতে পারেন যদিও তারা
অন্যান্য কোণ বন্ধনীতেও। প্রতিবার যখন আপনি একটি ভারসাম্যপূর্ণ মিল পান, এর বাইরেরটি সরান
ডিলিমিটার (এটি আপনি এইমাত্র মিলেছেন তাই এটি আবার মেলে না) এবং এটি একটি সারিতে যোগ করুন
প্রক্রিয়া করার জন্য স্ট্রিং এর। আপনি কোন মিল না পাওয়া পর্যন্ত এটি করতে থাকুন:

#!/usr/local/bin/perl5.10.0

আমার @সারি =<<"এখানে";
আমার কিছু আছে > এবং
>>
এবং এটাই.
এখানে

আমার $regex = qr/
( # বন্ধনীর শুরু 1
< # একটি খোলার কোণ বন্ধনীর সাথে মেলে
(?:
[^<>]++ # এক বা একাধিক নন অ্যাঙ্গেল বন্ধনী, নন ব্যাকট্র্যাকিং
|
(?1) # বন্ধনী 1 এর পুনরাবৃত্তি
)*
> # একটি ক্লোজিং অ্যাঙ্গেল ব্র্যাকেটের সাথে মেলে
) # বন্ধনীর শেষ 1
/এক্স;

$" = "\n\t";

যখন (@সারি ) {
আমার $স্ট্রিং = শিফট @কিউ;

my @groups = $string =~ m/$regex/g;
@groups হলে "Found:\n\t@groups\n\n" প্রিন্ট করুন;

আনশিফট @সারি, মানচিত্র { s/^ $//; $_ } @গ্রুপ;
}

আউটপুট সমস্ত গ্রুপ দেখায়। সবচেয়ে বাইরের মিলগুলি প্রথমে এবং নেস্টেড দেখায়৷
ম্যাচগুলি পরে দেখাবে:

পাওয়া:
>
>>

পাওয়া:


পাওয়া:
>

পাওয়া:


কি না it গড় যে regexes হয় লোভী? কিভাবে পারেন I পাওয়া কাছাকাছি এটা?
বেশিরভাগ লোক মানে যে লোভী রেজেক্সগুলি যতটা সম্ভব মেলে। প্রযুক্তিগতভাবে বলতে গেলে,
এটা আসলে কোয়ান্টিফায়ার ("?", "*", "+", "{}") যেগুলো পুরোটার চেয়ে লোভী
প্যাটার্ন পার্ল সামগ্রিক লোভের চেয়ে স্থানীয় লোভ এবং তাৎক্ষণিক তৃপ্তি পছন্দ করে। পেতে
একই কোয়ান্টিফায়ারের অ-লোভী সংস্করণ, ব্যবহার করুন ("??", "*?", "+?", "{}?")।

একটি উদাহরণ:

আমার $s1 = আমার $s2 = "আমি খুব ঠান্ডা";
$s1 =~ s/ve.*y //; # আমার ঠান্ডা লাগছে
$s2 =~ s/ve.*?y //; #আমার খুব ঠান্ডা লাগে

লক্ষ্য করুন কিভাবে দ্বিতীয় প্রতিস্থাপনটি "y" এর সম্মুখীন হওয়ার সাথে সাথেই মিল হওয়া বন্ধ করে দেয়। দ্য
"*?" কোয়ান্টিফায়ার কার্যকরভাবে রেগুলার এক্সপ্রেশন ইঞ্জিনকে দ্রুত একটি মিল খুঁজে পেতে বলে
যতটা সম্ভব এবং লাইনে পরবর্তী যা কিছু আছে তার উপর নিয়ন্ত্রণ পাস করুন, আপনি যদি হতেন
গরম আলু খেলে

কিভাবে do I প্রক্রিয়া প্রতি শব্দ on প্রতি লাইন?
বিভক্ত ফাংশন ব্যবহার করুন:

যখন (<>) {
foreach my $word ( বিভক্ত ) {
# এখানে $word দিয়ে কিছু করুন
}
}

মনে রাখবেন যে এটি আসলে ইংরেজি অর্থে একটি শব্দ নয়; এটা একটানা মাত্র খণ্ড
নন-হোয়াইটস্পেস অক্ষর।

শুধুমাত্র আলফানিউমেরিক সিকোয়েন্সের সাথে কাজ করতে (আন্ডারস্কোর সহ), আপনি বিবেচনা করতে পারেন

যখন (<>) {
foreach $word (m/(\w+)/g) {
# এখানে $word দিয়ে কিছু করুন
}
}

কিভাবে পারেন I ছাপানো বাইরে a শব্দ ফ্রিকোয়েন্সি or লাইন ফ্রিকোয়েন্সি সারসংক্ষেপ?
এটি করার জন্য, আপনাকে ইনপুট স্ট্রীমের প্রতিটি শব্দ পার্স করতে হবে। আমরা যে দ্বারা ভান করব
আপনি যে শব্দটি মানেন তার পরিবর্তে বর্ণমালা, হাইফেন বা অ্যাপোস্ট্রোফের অংশ
আগের প্রশ্নে দেওয়া একটি শব্দের হোয়াইটস্পেস খণ্ড ধারণা:

আমার (% দেখা);
যখন (<>) {
যখন ( /(\b[^\W_\d][\w'-]+\b)/g ) { # মিস করে "`ভেড়া'"
$seen{$1}++;
}
}

যখন ( my ($word, $count) = প্রতিটি %seen ) {
"$count $word\n" প্রিন্ট করুন;
}

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

আমার (% দেখা);

যখন (<>) {
$seen{$_}++;
}

যখন ( আমার ($লাইন, $count) = প্রতিটি % দেখা ) {
প্রিন্ট "$count $line";
}

আপনি যদি এই আউটপুটগুলিকে সাজানো ক্রমে চান, perlfaq4 দেখুন: "আমি কীভাবে একটি হ্যাশ সাজাতে পারি
(ঐচ্ছিকভাবে কী এর পরিবর্তে মান দ্বারা)?"

কিভাবে পারেন I do আনুমানিক মিলে যাচ্ছে?
দেখুন মডিউল স্ট্রিং::প্রায় CPAN থেকে উপলব্ধ।

কিভাবে do I দক্ষতার ম্যাচ অনেক নিয়মিত এক্সপ্রেশন at একদা?
(ব্রায়ান ডি ফয় দ্বারা অবদান)

আপনার যদি পার্ল 5.10 বা তার পরে থাকে তবে এটি প্রায় তুচ্ছ। আপনি শুধু একটি বিরুদ্ধে স্মার্ট ম্যাচ
রেগুলার এক্সপ্রেশন অবজেক্টের অ্যারে:

আমার @প্যাটার্নস = ( qr/Fr.d/, qr/B.rn.y/, qr/W.lm./);

if( $string ~~ @patterns ) {
...
};

স্মার্ট ম্যাচ থেমে যায় যখন এটি একটি মিল খুঁজে পায়, তাই এটি প্রতিটি অভিব্যক্তি চেষ্টা করতে হবে না।

পার্ল 5.10 এর আগে, আপনার কিছু কাজ আছে। আপনি একটি সংকলন এড়াতে চান
রেগুলার এক্সপ্রেশন প্রতিবার যখন আপনি এটি মেলাতে চান। এই উদাহরণে, পার্ল পুনরায় কম্পাইল করা আবশ্যক
"foreach" লুপের প্রতিটি পুনরাবৃত্তির জন্য নিয়মিত অভিব্যক্তি যেহেতু এটির কোন উপায় নেই
জানুন $pattern কি হবে:

আমার @প্যাটার্নস = qw( foo bar baz);

লাইন: যখন( ) {
foreach $pattern ( @patterns ) {
যদি ( /\b$প্যাটার্ন\b/i) {
ছাপা;
পরবর্তী লাইন;
}
}
}

"qr//" অপারেটরটি পার্ল 5.005 এ দেখানো হয়েছে। এটি একটি নিয়মিত অভিব্যক্তি কম্পাইল, কিন্তু না
এটা প্রয়োগ আপনি যখন regex এর প্রাক-সংকলিত সংস্করণ ব্যবহার করেন, তখন পার্ল কম কাজ করে। এই
উদাহরণস্বরূপ, প্রতিটি প্যাটার্নকে তার প্রাক-সংকলিত আকারে পরিণত করতে আমি একটি "মানচিত্র" সন্নিবেশিত করেছি। বাকি গুলো
স্ক্রিপ্ট একই, কিন্তু দ্রুত:

আমার @প্যাটার্নস = মানচিত্র { qr/\b$_\b/i } qw( foo bar baz);

লাইন: যখন( <> ) {
foreach $pattern ( @patterns ) {
যদি ( /$ pattern/ ) {
ছাপা;
পরবর্তী লাইন;
}
}
}

কিছু ক্ষেত্রে, আপনি একটি একক নিয়মিত অভিব্যক্তিতে বেশ কয়েকটি নিদর্শন তৈরি করতে সক্ষম হতে পারেন।
যদিও পিছিয়ে যাওয়া প্রয়োজন এমন পরিস্থিতিতে সতর্ক থাকুন।

my $regex = join '|', qw(foo bar baz);

লাইন: যখন( <> ) {
প্রিন্ট যদি /\b(?:$regex)\b/i;
}

নিয়মিত এক্সপ্রেশন দক্ষতা সম্পর্কে আরও বিশদ বিবরণের জন্য, দেখুন নিয়ন্ত্রণ নিয়মিত এক্সপ্রেশন by
জেফরি ফ্রিডল। তিনি ব্যাখ্যা করেন কিভাবে রেগুলার এক্সপ্রেশন ইঞ্জিন কাজ করে এবং কেন কিছু প্যাটার্ন
আশ্চর্যজনকভাবে অদক্ষ। একবার আপনি বুঝতে পারল কিভাবে নিয়মিত অভিব্যক্তি প্রয়োগ করে,
আপনি পৃথক পরিস্থিতিতে তাদের টিউন করতে পারেন.

কেন না শব্দ-সীমা অনুসন্ধান সঙ্গে "\b" কাজ উন্নত আমাকে?
(ব্রায়ান ডি ফয় দ্বারা অবদান)

নিশ্চিত করুন যে আপনি জানেন যে \b আসলে কী করে: এটি একটি শব্দ অক্ষরের মধ্যে সীমানা, \w,
এবং এমন কিছু যা একটি শব্দ চরিত্র নয়। যে জিনিস একটি শব্দ চরিত্র না হতে পারে
\W, তবে এটি স্ট্রিংয়ের শুরু বা শেষও হতে পারে।

এটি হোয়াইটস্পেস এবং নন-হোয়াইটস্পেসের মধ্যে সীমানা নয় (না!) এবং এটি স্টাফ নয়
শব্দের মধ্যে আমরা বাক্য তৈরি করতে ব্যবহার করি।

রেজেক্স স্পিকে, একটি শব্দের সীমানা (\b) হল একটি "শূন্য প্রস্থের দাবি", যার অর্থ এটি নয়
স্ট্রিং একটি অক্ষর প্রতিনিধিত্ব করে, কিন্তু একটি নির্দিষ্ট অবস্থানে একটি শর্ত.

রেগুলার এক্সপ্রেশনের জন্য, /\bPerl\b/, "P" এর আগে একটি শব্দের সীমানা থাকতে হবে এবং
"l" এর পরে। যতক্ষণ না একটি শব্দের অক্ষর ছাড়া অন্য কিছু "P" এর আগে থাকে এবং
"l" সফল হয়, প্যাটার্নটি মিলবে। এই স্ট্রিংগুলি /\bPerl\b/ মেলে।

"পার্ল" # P এর আগে বা l এর পরে কোনো শব্দ নেই
"পার্ল" # আগের মতই (স্পেস একটি শব্দ অক্ষর নয়)
"'পার্ল'" # চর একটি শব্দ নয়
"Perl's" # P এর আগে কোন শব্দের অক্ষর নেই, "l" এর পরে অ-শব্দ অক্ষর নেই

এই স্ট্রিংগুলি /\bPerl\b/ মেলে না।

"পার্ল_" #_ একটি শব্দ চর!
"Perler" # P এর আগে কোন শব্দ নেই, কিন্তু l এর পরে একটি

যদিও শব্দের সাথে মিল করার জন্য আপনাকে \b ব্যবহার করতে হবে না। আপনি অ-শব্দ অক্ষর খুঁজতে পারেন
শব্দ অক্ষর দ্বারা বেষ্টিত. এই স্ট্রিংগুলি প্যাটার্নের সাথে মেলে /\b'\b/।

"করবেন না" # ' অক্ষরটি "n" এবং "t" দ্বারা বেষ্টিত
"qep'a'" # ' চরটি "p" এবং "a" দ্বারা বেষ্টিত

এই স্ট্রিংগুলি /\b'\b/ মেলে না।

"foo'" # অ-শব্দের পরে কোনো চর নেই'

আপনি একটি শব্দ থাকা উচিত নয় তা নির্দিষ্ট করতে \b, \B এর পরিপূরকও ব্যবহার করতে পারেন
সীমা

প্যাটার্নে /\Bam\B/, "a" এর আগে এবং "m" এর পরে একটি শব্দ অক্ষর থাকতে হবে।
এই নিদর্শনগুলি মেলে /\Bam\B/:

"llama" # "am" শব্দের অক্ষর দ্বারা বেষ্টিত
"স্যামুয়েল" # একই

এই স্ট্রিংগুলি মেলে না /\Bam\B/

"স্যাম" # "a" এর আগে কোন শব্দের সীমানা নেই, কিন্তু "m" এর পরে একটি
"আমি স্যাম" # "আমি" অ-শব্দ অক্ষর দ্বারা বেষ্টিত

কেন না ব্যবহার $&, $`, or $' ধীর my কার্যক্রম নিচে?
(অ্যানো সিগেল দ্বারা অবদান)

একবার পার্ল দেখে যে আপনার প্রোগ্রামের যে কোনও জায়গায় এই ভেরিয়েবলগুলির একটি দরকার, এটি সরবরাহ করে
প্রতিটি এবং প্রতিটি প্যাটার্ন মিলে তাদের. এর মানে হল যে প্রতিটি প্যাটার্নে সম্পূর্ণ মেলে
স্ট্রিং কপি করা হবে, এর কিছু অংশ $`, অংশ $& এবং অংশ $'-এ। এভাবেই শাস্তি
দীর্ঘ স্ট্রিং এবং নিদর্শনগুলির সাথে সবচেয়ে গুরুতর যা প্রায়শই মেলে। যদি আপনি $&, $', এবং $` এড়িয়ে যান
পারেন, কিন্তু আপনি যদি না পারেন, একবার আপনি এগুলি ব্যবহার করার পরে, ইচ্ছামত ব্যবহার করুন কারণ আপনি করেছেন৷
ইতিমধ্যে মূল্য পরিশোধ. মনে রাখবেন যে কিছু অ্যালগরিদম সত্যিই তাদের প্রশংসা করে। হিসাবে
5.005 রিলিজ, $& ভেরিয়েবলটি আর অন্য দুটির মতো "ব্যয়বহুল" নয়।

যেহেতু পার্ল 5.6.1 বিশেষ ভেরিয়েবল @- এবং @+ কার্যকরীভাবে $`, $& এবং $' প্রতিস্থাপন করতে পারে।
এই অ্যারেগুলিতে প্রতিটি ম্যাচের শুরু এবং শেষে পয়েন্টার থাকে (এর জন্য পার্লভার দেখুন
সম্পূর্ণ গল্প), তাই তারা আপনাকে মূলত একই তথ্য দেয়, কিন্তু ঝুঁকি ছাড়াই
অত্যধিক স্ট্রিং অনুলিপি।

পার্ল 5.10 তিনটি বিশেষ যোগ করেছে, "${^MATCH}", "${^PREMATCH}", এবং "${^POSTMATCH}"
একই কাজ কিন্তু গ্লোবাল পারফরম্যান্স পেনাল্টি ছাড়া। পার্ল 5.10 শুধুমাত্র এই ভেরিয়েবল সেট করে
আপনি যদি "/p" মডিফায়ার দিয়ে রেগুলার এক্সপ্রেশন কম্পাইল বা এক্সিকিউট করেন।

কি ভাল is "\G" in a নিয়মিত অভিব্যক্তি?
আপনি "\G" অ্যাঙ্কর ব্যবহার করে একই স্ট্রিং-এ পরবর্তী ম্যাচ শুরু করতে যেখানে শেষ ম্যাচ হয়েছিল
ছেড়ে দেওয়া রেগুলার এক্সপ্রেশন ইঞ্জিন পরেরটি খুঁজে পেতে কোনো অক্ষর এড়িয়ে যেতে পারে না
এই অ্যাঙ্করের সাথে মেলে, তাই "\G" স্ট্রিং অ্যাঙ্করের শুরুর অনুরূপ, "^"। দ্য
"\G" অ্যাঙ্কর সাধারণত "g" পতাকার সাথে ব্যবহৃত হয়। এটি হিসাবে "pos()" এর মান ব্যবহার করে
পরবর্তী ম্যাচ শুরু করার অবস্থান। ম্যাচ অপারেটর হিসাবে পরপর ম্যাচ তোলে, এটা
শেষ ম্যাচের (বা প্রথমটি) পরবর্তী অক্ষরের অবস্থান সহ "pos()" আপডেট করে
পরবর্তী ম্যাচের চরিত্র, আপনি এটিকে কীভাবে দেখতে চান তার উপর নির্ভর করে)। প্রতিটি স্ট্রিং তার আছে
নিজস্ব "pos()" মান।

ধরুন আপনি "1122a44"-এর মতো একটি স্ট্রিং-এ অঙ্কের সবগুলো জোড়া জোড়া লাগাতে চান
এবং যখন আপনি অ-সংখ্যার সম্মুখীন হন তখন মিল বন্ধ করুন। আপনি 11 এবং 22 মেলাতে চান কিন্তু
চিঠি 22 এবং 44 এর মধ্যে দেখায় এবং আপনি "a" এ থামতে চান। সহজভাবে মিলিত জোড়া
সংখ্যাগুলি "a" এর উপরে চলে যায় এবং এখনও 44 এর সাথে মেলে।

$_ = "1122a44";
আমার @জোড়া = m/(\d\d)/g; # qw ( 11 22 44 )

আপনি যদি "\G" অ্যাঙ্কর ব্যবহার করেন, তাহলে আপনি 22 এর পরে ম্যাচটিকে "a" দিয়ে শুরু করতে বাধ্য করবেন। দ্য
রেগুলার এক্সপ্রেশন সেখানে মেলে না যেহেতু এটি একটি সংখ্যা খুঁজে পায় না, তাই পরের মিল
ব্যর্থ হয় এবং ম্যাচ অপারেটর ইতিমধ্যে পাওয়া জোড়া ফিরিয়ে দেয়।

$_ = "1122a44";
আমার @জোড়া = m/\G(\d\d)/g; # qw ( 11 22 )

আপনি স্কেলার প্রসঙ্গে "\G" অ্যাঙ্কর ব্যবহার করতে পারেন। আপনি এখনও "g" পতাকা প্রয়োজন.

$_ = "1122a44";
যখন( m/\G(\d\d)/g ) {
প্রিন্ট "Found $1\n";
}

ম্যাচটি "a" অক্ষরে ব্যর্থ হওয়ার পরে, পার্ল "pos()" এবং পরবর্তী ম্যাচটি পুনরায় সেট করে
একই স্ট্রিং শুরুতে শুরু হয়।

$_ = "1122a44";
যখন( m/\G(\d\d)/g ) {
প্রিন্ট "Found $1\n";
}

m/(\d\d)/g হলে "সময়ের পরে $1 পাওয়া গেছে" প্রিন্ট করুন; # "11" খুঁজে পায়

আপনি "c" পতাকা দিয়ে ব্যর্থ হলে "pos()" রিসেট নিষ্ক্রিয় করতে পারেন, perlop এ নথিভুক্ত এবং
perlref পরবর্তী ম্যাচগুলি শুরু হয় যেখানে শেষ সফল ম্যাচটি শেষ হয়েছিল (এর মান
"pos()") এমনকি যদি একই স্ট্রিং এর একটি ম্যাচ এর মধ্যে ব্যর্থ হয়। এই ক্ষেত্রে, দ
"while()" লুপের পরে ম্যাচ "a" এ শুরু হয় (যেখানে শেষ ম্যাচ থামে), এবং যেহেতু
এটি কোন নোঙ্গর ব্যবহার করে না এটি 44 খুঁজে পেতে "a" এর উপর এড়িয়ে যেতে পারে।

$_ = "1122a44";
যখন( m/\G(\d\d)/gc ) {
প্রিন্ট "Found $1\n";
}

m/(\d\d)/g হলে "সময়ের পরে $1 পাওয়া গেছে" প্রিন্ট করুন; # "44" খুঁজে পায়

সাধারণত আপনি "c" পতাকা সহ "\G" অ্যাঙ্কর ব্যবহার করেন যখন আপনি একটি ভিন্ন ম্যাচ চেষ্টা করতে চান
যদি কেউ ব্যর্থ হয়, যেমন টোকেনাইজারে। জেফরি ফ্রিডল এই উদাহরণটি অফার করে যা কাজ করে
5.004 বা পরে।

যখন (<>) {
চম্প
পার্সার: {
m/ \G( \d+\b )/gcx && { প্রিন্ট করুন "নম্বর: $1\n"; পুনরায় করা };
m/ \G( \w+ )/gcx && { প্রিন্ট করুন "শব্দ: $1\n"; পুনরায় করা };
m/ \G( \s+ )/gcx && { প্রিন্ট করুন "স্পেস: $1\n"; পুনরায় করা };
m/ \G( [^\w\d]+ )/gcx && do { প্রিন্ট করুন "অন্যান্য: $1\n"; পুনরায় করা };
}
}

প্রতিটি লাইনের জন্য, "PARSER" লুপটি প্রথমে একটি দ্বারা অনুসরণ করা সংখ্যাগুলির একটি সিরিজ মেলানোর চেষ্টা করে৷
শব্দের সীমানা। এই ম্যাচটি সেই জায়গায় শুরু করতে হবে যেখানে শেষ ম্যাচটি বাকি ছিল (বা
প্রথম ম্যাচে স্ট্রিংয়ের শুরু)। যেহেতু "m/ \G( \d+\b )/gcx" "c" পতাকা ব্যবহার করে,
যদি স্ট্রিং সেই রেগুলার এক্সপ্রেশনের সাথে মেলে না, পার্ল রিসেট করে না pos() এবং
একটি ভিন্ন প্যাটার্ন চেষ্টা করার জন্য পরবর্তী ম্যাচ একই অবস্থানে শুরু হয়।

হয় পার্ল regexes ডিএফএ or এনএফএ? হয় তারা POSIX অনুযোগ?
যদিও এটা সত্য যে পার্লের রেগুলার এক্সপ্রেশন ডিএফএ-এর সাথে সাদৃশ্যপূর্ণ (নির্ণয়বাদী সসীম
স্বয়ংক্রিয়) এর egrep(1) প্রোগ্রাম, তারা প্রকৃতপক্ষে NFAs (অ-নির্ধারণবাদী) হিসাবে বাস্তবায়িত হয়
সীমিত স্বয়ংক্রিয়) ব্যাকট্র্যাকিং এবং ব্যাকরেফারেন্সিংয়ের অনুমতি দিতে। এবং তারা POSIX-শৈলী নয়
হয়, কারণ সেগুলি সব ক্ষেত্রেই সবচেয়ে খারাপ আচরণের নিশ্চয়তা দেয়। (মনে হচ্ছে কিছু
লোকেরা ধারাবাহিকতার গ্যারান্টি পছন্দ করে, এমনকি যখন নিশ্চিত করা হয় তা হল ধীরগতি।) দেখুন
সমস্ত বিবরণের জন্য Jeffrey Friedl-এর "Mastering Regular Expressions" (O'Reilly থেকে) বইটি
আপনি কখনও এই বিষয়ে জানতে আশা করতে পারেন (একটি সম্পূর্ণ উদ্ধৃতি perlfaq2 এ প্রদর্শিত হয়)।

কী ভুল সঙ্গে ব্যবহার , grep in a অকার্যকর প্রসঙ্গ?
সমস্যা হল যে গ্রেপ প্রসঙ্গ নির্বিশেষে একটি রিটার্ন তালিকা তৈরি করে। এর মানে
আপনি পার্লকে এমন একটি তালিকা তৈরি করার ঝামেলায় ফেলছেন যা আপনি তখনই ফেলে দেন। যদি
তালিকাটি বড়, আপনি সময় এবং স্থান উভয়ই নষ্ট করেন। আপনার উদ্দেশ্য উপর পুনরাবৃত্তি করা হয়
তালিকা, তারপর এই উদ্দেশ্যে একটি লুপ ব্যবহার করুন।

5.8.1 এর চেয়ে পুরানো পার্লে, মানচিত্রও এই সমস্যায় ভুগছে। কিন্তু 5.8.1 থেকে এই
স্থির করা হয়েছে, এবং মানচিত্র প্রসঙ্গ সচেতন - অকার্যকর প্রসঙ্গে, কোন তালিকা তৈরি করা হয় না।

কিভাবে পারেন I ম্যাচ স্ট্রিং সঙ্গে মাল্টিবাইট চরিত্র?
পার্ল 5.6 থেকে শুরু করে পার্লের মাল্টিবাইট অক্ষর সমর্থনের কিছু স্তর রয়েছে। পার্ল 5.8 বা
পরে সুপারিশ করা হয়। সমর্থিত মাল্টিবাইট অক্ষর ভাণ্ডার অন্তর্ভুক্ত ইউনিকোড, এবং
এনকোড মডিউলের মাধ্যমে উত্তরাধিকার এনকোডিং। perluniintro, perlunicode, এবং Encode দেখুন।

আপনি যদি পুরানো পার্লগুলির সাথে আটকে থাকেন তবে আপনি ইউনিকোড::স্ট্রিং মডিউল, এবং এর সাথে ইউনিকোড করতে পারেন
ইউনিকোড::ম্যাপ8 এবং ইউনিকোড::ম্যাপ মডিউল ব্যবহার করে অক্ষর রূপান্তর। আপনি যদি ব্যবহার করেন
জাপানি এনকোডিং, আপনি jperl 5.005_03 ব্যবহার করে দেখতে পারেন।

অবশেষে, নিম্নলিখিত পদ্ধতির সেট জেফরি ফ্রিডল দ্বারা অফার করা হয়েছিল, যার নিবন্ধে
দ্য পার্ল জার্নালের সংখ্যা 5 এই বিষয়েই কথা বলে।

ধরুন আপনার কাছে কিছু অদ্ভুত মার্টিন এনকোডিং আছে যেখানে ASCII বড় হাতের অক্ষরের জোড়া
একক মার্টিন অক্ষর এনকোড করুন (অর্থাৎ দুটি বাইট "সিভি" একটি একক মঙ্গলযান অক্ষর তৈরি করে, যেমন করে
দুটি বাইট "SG", "VS", "XX", ইত্যাদি)। অন্যান্য বাইট একক অক্ষর প্রতিনিধিত্ব করে, ঠিক মত
ASCII

সুতরাং, মঙ্গলগ্রহের স্ট্রিং "আমি সিভিএসজিএক্সএক্স!" নয়টি অক্ষর 'I' এনকোড করতে 12 বাইট ব্যবহার করে,
'', 'a', 'm', '', 'CV', 'SG', 'XX', '!'।

এখন বলুন আপনি একক অক্ষর "/GX/" অনুসন্ধান করতে চান৷ পার্ল সম্পর্কে জানেন না
Martian, তাই এটি "I am CVSGXX!"-এ দুটি বাইট "GX" খুঁজে পাবে। স্ট্রিং, যদিও যে
অক্ষরটি সেখানে নেই: এটি কেবল এটির মতো দেখাচ্ছে কারণ "SG" "XX" এর পাশে রয়েছে, কিন্তু সেখানে আছে
কোন বাস্তব "GX" নেই। এটি একটি বড় সমস্যা।

এটি মোকাবেলা করার জন্য এখানে কয়েকটি উপায় রয়েছে, সমস্ত বেদনাদায়ক:

# নিশ্চিত করুন যে সংলগ্ন "মার্টিয়ান" বাইট আর সংলগ্ন নয়।
$martian =~ s/([AZ][AZ])/ $1 /g;

প্রিন্ট "Found GX!\n" যদি $martian =~ /GX/;

বা এই মত:

আমার @chars = $martian =~ m/([AZ][AZ]|[^AZ])/g;
# উপরেরটি ধারণাগতভাবে অনুরূপ: my @chars = $text =~ m/(.)/g;
#
আমার $char (@chars) {
প্রিন্ট "Found GX!\n", শেষ হলে $char eq 'GX';
}

বা এই মত:

যখন ($martian =~ m/\G([AZ][AZ]|.)/gs) { # \G সম্ভবত অপ্রয়োজনীয়
যদি ($1 eq 'GX') {
প্রিন্ট "Found GX!\n";
শেষ
}
}

বেঞ্জামিন গোল্ডবার্গের কাছ থেকে এটি করার আরেকটি, সামান্য কম বেদনাদায়ক উপায় রয়েছে, যিনি একটি ব্যবহার করেন
শূন্য-প্রস্থ নেতিবাচক চেহারা-পিছন দাবি।

প্রিন্ট "Found GX!\n" যদি $martian =~ m/
(?
(?:[AZ][AZ])*?
GX
/এক্স;

এটি সফল হয় যদি "মঙ্গলযান" অক্ষর GX স্ট্রিং-এ থাকে এবং অন্যথায় ব্যর্থ হয়। আপনি যদি
ব্যবহার করতে পছন্দ করেন না (?
(?

এটিতে $-[0] এবং $+[0] এ ভুল জিনিস রাখার ত্রুটি রয়েছে, তবে এটি সাধারণত
চারপাশে কাজ করা যেতে পারে।

কিভাবে do I ম্যাচ a নিয়মিত অভিব্যক্তি যে in a পরিবর্তনশীল?
(ব্রায়ান ডি ফয় দ্বারা অবদান)

আমাদের ম্যাচ অপারেটর (বা অন্য কিছু যা কাজ করে) এর মধ্যে হার্ড-কোড প্যাটার্ন করতে হবে না
নিয়মিত অভিব্যক্তি সহ)। আমরা পরবর্তীতে ব্যবহারের জন্য প্যাটার্নটিকে একটি ভেরিয়েবলে রাখতে পারি।

ম্যাচ অপারেটর একটি ডবল উদ্ধৃতি প্রসঙ্গ, তাই আপনি আপনার ভেরিয়েবলকে ঠিকভাবে ইন্টারপোলেট করতে পারেন
একটি ডবল উদ্ধৃত স্ট্রিং মত. এই ক্ষেত্রে, আপনি ব্যবহারকারীর ইনপুট হিসাবে নিয়মিত অভিব্যক্তি পড়ুন
এবং $regex এ সংরক্ষণ করুন। একবার আপনার $regex-এ প্যাটার্নটি হয়ে গেলে, আপনি সেই ভেরিয়েবলটি ব্যবহার করবেন
ম্যাচ অপারেটর।

chomp( আমার $regex = );

if( $string =~ m/$regex/ ) { ... }

$regex-এ যেকোনো রেগুলার এক্সপ্রেশন বিশেষ অক্ষর এখনও বিশেষ, এবং প্যাটার্ন
এখনও বৈধ হতে হবে বা পার্ল অভিযোগ করবে। উদাহরণস্বরূপ, এই প্যাটার্নে একটি আছে
জোড়াবিহীন বন্ধনী।

my $regex = "অতুলনীয় ( প্যারেন";

"সবগুলোকে আবদ্ধ করার জন্য দুটি বন্ধনী" =~ m/$regex/;

যখন পার্ল রেগুলার এক্সপ্রেশন কম্পাইল করে, তখন এটি বন্ধনীটিকে a-এর শুরু হিসাবে বিবেচনা করে
মেমরি ম্যাচ যখন এটি বন্ধ বন্ধনী খুঁজে পায় না, তখন এটি অভিযোগ করে:

তুলনাহীন ( রেজেক্সে; দ্বারা চিহ্নিত <-- এখানে m/unmatched ( <-- HERE paren/ এ স্ক্রিপ্ট লাইন 3.

আমাদের পরিস্থিতির উপর নির্ভর করে আপনি এটিকে বিভিন্ন উপায়ে পেতে পারেন। প্রথমত, যদি আপনি না করেন
স্ট্রিং এর যেকোন অক্ষর বিশেষ হতে চান, আপনি তাদের সাথে এড়িয়ে যেতে পারেন
আপনি স্ট্রিং ব্যবহার করার আগে "quotemeta"।

chomp( আমার $regex = );
$regex = উদ্ধৃতি ($regex);

if( $string =~ m/$regex/ ) { ... }

আপনি "\Q" এবং "\E" ক্রম ব্যবহার করে সরাসরি ম্যাচ অপারেটরে এটি করতে পারেন। দ্য
"\Q" পার্লকে বলে যে বিশেষ অক্ষরগুলি থেকে পালানো শুরু করতে হবে, এবং "\E" এটিকে বলে যে কোথায়
স্টপ (আরো বিস্তারিত জানার জন্য perlop দেখুন)।

chomp( আমার $regex = );

যদি ( $string =~ m/\Q$regex\E/ ) { ... }

বিকল্পভাবে, আপনি "qr//" ব্যবহার করতে পারেন, রেগুলার এক্সপ্রেশন কোট অপারেটর (এর জন্য perlop দেখুন
আরো বিস্তারিত). এটি উদ্ধৃতি এবং সম্ভবত প্যাটার্ন কম্পাইল, এবং আপনি নিয়মিত আবেদন করতে পারেন
প্যাটার্নে অভিব্যক্তি পতাকা।

chomp( আমার $ইনপুট = );

আমার $regex = qr/$input/is;

$string =~ m/$regex/ # m/$input/is এর মতো;

আপনি পুরো জিনিসটির চারপাশে একটি "ইভাল" ব্লক মোড়ানোর মাধ্যমে কোনও ত্রুটি আটকাতে চাইতে পারেন।

chomp( আমার $ইনপুট = );

eval {
if( $string =~ m/\Q$input\E/ ) { ... }
};
সতর্ক করুন $@ যদি $@;

অথবা...

আমার $regex = eval { qr/$input/is };
যদি ( সংজ্ঞায়িত $regex ) {
$string =~ m/$regex/;
}
অন্য {
সতর্ক করুন $@;
}

AUTHOR এর এবং কপিরাইট


কপিরাইট (c) 1997-2010 টম ক্রিশ্চিয়ানসেন, নাথান টর্কিংটন এবং অন্যান্য লেখক যেমন উল্লেখ করা হয়েছে।
সর্বস্বত্ব সংরক্ষিত.

এই ডকুমেন্টেশন বিনামূল্যে; আপনি এটি পুনরায় বিতরণ করতে পারেন এবং/অথবা একই শর্তে এটি সংশোধন করতে পারেন
পার্ল নিজেই হিসাবে.

এটির বিতরণ নির্বিশেষে, এই ফাইলের সমস্ত কোড উদাহরণ এখানে স্থাপন করা হয়েছে৷
পাবলিক ডোমেইন। আপনার নিজের প্রোগ্রামগুলিতে এই কোডটি ব্যবহার করার জন্য আপনাকে অনুমতি দেওয়া হয়েছে এবং উত্সাহিত করা হচ্ছে৷
মজার জন্য বা লাভের জন্য যেমন আপনি উপযুক্ত মনে করেন। কোড ক্রেডিট প্রদান একটি সহজ মন্তব্য হবে
বিনয়ী কিন্তু প্রয়োজন হয় না।

onworks.net পরিষেবা ব্যবহার করে অনলাইনে perlfaq6 ব্যবহার করুন


বিনামূল্যে সার্ভার এবং ওয়ার্কস্টেশন

উইন্ডোজ এবং লিনাক্স অ্যাপ ডাউনলোড করুন

  • 1
    Eclipse Checkstyle প্লাগ-ইন
    Eclipse Checkstyle প্লাগ-ইন
    Eclipse Checkstyle প্লাগ-ইন
    চেকস্টাইল জাভা কোড সংহত করে
    Eclipse IDE এর নিরীক্ষক। দ্য
    প্লাগ-ইন রিয়েল-টাইম ফিডব্যাক প্রদান করে
    লঙ্ঘন সম্পর্কে ব্যবহারকারী...
    Eclipse Checkstyle প্লাগ-ইন ডাউনলোড করুন
  • 2
    AstrOrzPlayer
    AstrOrzPlayer
    AstrOrz Player একটি বিনামূল্যের মিডিয়া প্লেয়ার
    সফ্টওয়্যার, WMP এবং VLC ভিত্তিক অংশ। দ্য
    প্লেয়ার একটি minimalist শৈলী মধ্যে, সঙ্গে
    দশটিরও বেশি থিম রং, এবং এছাড়াও করতে পারেন
    খ ...
    AstrOrzPlayer ডাউনলোড করুন
  • 3
    movistartv
    movistartv
    কোডি মুভিস্টার+ টিভি এক্সবিএমসি-এর জন্য অ্যাডন
    কোডি que পারমিট ডিসপোনার ডি আন
    আইপিটিভি ডি লস সার্ভিসেস ডিকোডিফিকেডর
    মুভিস্টার ইন্টিগ্রেডো এন ইউনো ডি লস
    মিডিয়া সেন্টার মা...
    movistartv ডাউনলোড করুন
  • 4
    কোড :: ব্লক
    কোড :: ব্লক
    কোড::ব্লক একটি বিনামূল্যের, ওপেন সোর্স,
    ক্রস-প্ল্যাটফর্ম C, C++ এবং Fortran IDE
    সবচেয়ে চাহিদাপূর্ণ চাহিদা মেটাতে নির্মিত
    এর ব্যবহারকারীদের। এটা খুব হতে ডিজাইন করা হয়
    প্রসারিত...
    ডাউনলোড কোড::ব্লক
  • 5
    মাঝে
    মাঝে
    মিডস্ট বা অ্যাডভান্সড মাইনক্রাফ্ট ইন্টারফেস
    এবং ডেটা/স্ট্রাকচার ট্র্যাকিং একটি টুল
    একটি Minecraft একটি ওভারভিউ প্রদর্শন
    বিশ্ব, আসলে এটি তৈরি না করেই। এটা
    করতে পারা ...
    এর মধ্যে ডাউনলোড করুন
  • 6
    MSYS2
    MSYS2
    MSYS2 হল টুলের একটি সংগ্রহ এবং
    লাইব্রেরি আপনি একটি সঙ্গে প্রদান
    নির্মাণের জন্য সহজে ব্যবহারযোগ্য পরিবেশ,
    নেটিভ উইন্ডোজ ইনস্টল এবং চালানো
    সফটওয়্যার. এটা কন...
    MSYS2 ডাউনলোড করুন
  • আরও »

লিনাক্স কমান্ডগুলি

  • 1
    abootimg
    abootimg
    abootimg - অ্যান্ড্রয়েড বুট ম্যানিপুলেট করুন
    ছবি বর্ণনা: টুল
    অ্যান্ড্রয়েড বুট ইমেজ পড়ুন/লিখুন/আপডেট করুন...
    Abootimg চালান
  • 2
    abr2gbr
    abr2gbr
    abr2gbr - ফটোশপ এবং পেইন্ট রূপান্তর করে
    জিম্পে প্রো ব্রাশ কেনাকাটা করুন...
    abr2gbr চালান
  • 3
    কপিম্যাট
    কপিম্যাট
    কপিম্যাট - ASCII ম্যাট্রিক্সকে এ রূপান্তর করুন
    দ্রুত পড়ার জন্য উপযোগী ডাটাবেস...
    কপিম্যাট চালান
  • 4
    কপিরাইট-আপডেট
    কপিরাইট-আপডেট
    কপিরাইট-আপডেট - কপিরাইট আপডেট করুন
    ফাইলে তথ্য...
    কপিরাইট-আপডেট চালান
  • 5
    g.guigrass
    g.guigrass
    g.gui - একটি GRASS গ্রাফিকাল ব্যবহারকারী চালু করে
    ইন্টারফেস (GUI) সেশন। ঐচ্ছিকভাবে
    ডিফল্ট ইউজার ইন্টারফেস সেটিংস আপডেট করে।
    কীওয়ার্ড: সাধারণ, GUI, ব্যবহারকারী ইন্টারফেস ...
    চালান g.guigrass
  • 6
    g.gui.এনিমেশনগ্রাস
    g.gui.এনিমেশনগ্রাস
    g.gui.animation - অ্যানিমেট করার টুল
    রাস্টার এবং ভেক্টর মানচিত্রের সিরিজ বা ক
    স্থান সময় রাস্টার বা ভেক্টর ডেটাসেট।
    কীওয়ার্ড: সাধারণ, GUI, প্রদর্শন,
    অ্যানিমেশন...
    g.gui.animationgrass চালান
  • আরও »

Ad