เบžเบฒเบชเบฒเบญเบฑเบ‡เบเบดเบ”เบžเบฒเบชเบฒเบเบฃเบฑเปˆเบ‡เปเบญเบชเบ›เบฒเป‚เบเบ™

OnWorks favicon

perlfaq6 - เบญเบญเบ™เบฅเบฒเบเปƒเบ™เบ„เบฅเบฒเบง

เป€เบ›เบตเบ”เปƒเบŠเป‰ perlfaq6 เปƒเบ™ OnWorks เบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เป‚เบฎเบ”เบ•เบดเป‰เบ‡เบŸเบฃเบตเบœเปˆเบฒเบ™ Ubuntu Online, Fedora Online, Windows online emulator เบซเบผเบท MAC OS online emulator

เบ™เบตเป‰เปเบกเปˆเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡ perlfaq6 เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป„เบ”เป‰เปƒเบ™ OnWorks เบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เป‚เบฎเบ”เบ•เบดเป‰เบ‡เบŸเบฃเบตเป‚เบ”เบเปƒเบŠเป‰เบซเบ™เบถเปˆเบ‡เปƒเบ™เบซเบผเบฒเบเป†เบšเปˆเบญเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบญเบญเบ™เป„เบฅเบ™เปŒเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบŠเบฑเปˆเบ™ Ubuntu Online, Fedora Online, Windows online emulator เบซเบผเบท MAC OS online emulator

เป‚เบ„เบ‡เบเบฒเบ™:

NAME


perlfaq6 - เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ›เบปเบเบเบฐเบ•เบด

เป€เบงเบตเบŠเบฑเปˆเบ™


5.021009 Version

เบฅเบฒเบเบฅเบฐเบญเบฝเบ”


เบžเบฒเบเบ™เบตเป‰เป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เปเบ›เบเบ—เบตเปˆเป€เบฅเบฑเบเบ™เป‰เบญเบเป€เบžเบฒเบฐเบงเปˆเบฒเบชเปˆเบงเบ™เบ—เบตเปˆเป€เบซเบผเบทเบญเบ‚เบญเบ‡ FAQ เปเบกเปˆเบ™เป€เบ•เบฑเบกเป„เบ›เบ”เป‰เบงเบเบ„เปเบฒเบ•เบญเบš
เบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเป€เบ›เบฑเบ™เบ›เบปเบเบเบฐเบ•เบด. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบเบฒเบ™เบ–เบญเบ”เบฅเบฐเบซเบฑเบ” URL เปเบฅเบฐเบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡
เปเบกเปˆเบ™เบ•เบปเบงเป€เบฅเบเบชเบฒเบกเบฒเบ”เบˆเบฑเบ”เบเบฒเบ™เบเบฑเบšเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเป€เบ›เบฑเบ™เบ›เบปเบเบเบฐเบ•เบด, เปเบ•เปˆเบ„เปเบฒเบ•เบญเบšเป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™เปเบกเปˆเบ™เบžเบปเบšเป€เบซเบฑเบ™เบขเบนเปˆเบšเปˆเบญเบ™เบญเบทเปˆเบ™
เปƒเบ™เป€เบญเบเบฐเบชเบฒเบ™เบ™เบตเป‰ (เปƒเบ™ perlfaq9: "เบ‚เป‰เบญเบเบˆเบฐเบ–เบญเบ”เบฅเบฐเบซเบฑเบ” เบซเบผเบทเบชเป‰เบฒเบ‡ %-encodings เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™เบขเบนเปˆเปƒเบ™เป€เบงเบฑเบšเป„เบ”เป‰เปเบ™เบงเปƒเบ”"
เปเบฅเบฐ perlfaq4: "เบ‚เป‰เบญเบเบˆเบฐเบเปเบฒเบ™เบปเบ”เป„เบ”เป‰เปเบ™เบงเปƒเบ”เบงเปˆเบฒ scalar เป€เบ›เบฑเบ™เบ•เบปเบงเป€เบฅเบ / เบ—เบฑเบ‡เบซเบกเบปเบ” / integer / float", เบˆเบฐเป€เบ›เบฑเบ™.
เบŠเบฑเบ”เป€เบˆเบ™).

เบงเบดเบ—เบตเบเบฒเบ™ เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰ I เบซเบงเบฑเบ‡เบงเปˆเบฒ to เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ เบ›เบปเบเบเบฐเบ•เบด expressions เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™ เบเบฒเบ™เบชเป‰เบฒเบ‡ เบœเบดเบ”เบเบปเบ” เปเบฒเบ เปเบฅเบฐ เบšเปเปˆเบชเบฒเบกเบฒเบ”เบฎเบฑเบเบชเบฒเป„เบ”เป‰ เบฅเบฐเบซเบฑเบ”?
เบชเบฒเบกเป€เบ•เบฑเบเบ™เบดเบเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเป€เบ›เบฑเบ™เบ›เบปเบเบเบฐเบ•เบดเบฎเบฑเบเบชเบฒเปเบฅเบฐเป€เบ‚เบปเป‰เบฒเปƒเบˆเป„เบ”เป‰.

เบ„เปเบฒเป€เบซเบฑเบ™เบ™เบญเบ Regex
เบญเบฐเบ—เบดเบšเบฒเบเบชเบดเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เป€เบฎเบฑเบ”เปเบฅเบฐเบงเบดเบ—เบตเบ—เบตเปˆเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เป€เบฎเบฑเบ”เบกเบฑเบ™, เป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบ„เบดเบ”เป€เบซเบฑเบ™ Perl เบ›เบปเบเบเบฐเบ•เบด.

# เบ›เปˆเบฝเบ™เป€เบชเบฑเป‰เบ™เป€เบ›เบฑเบ™เบ„เปเบฒเบ—เปเบฒเบญเบดเบ”, เบˆเปเป‰เบฒเบชเบญเบ‡เป€เบกเบฑเบ”, เปเบฅเบฐ
# เบ•เบปเบงเป€เบฅเบเบ‚เบญเบ‡เบ•เบปเบงเบญเบฑเบเบชเบญเบ™เปƒเบ™เบชเปˆเบงเบ™เบ—เบตเปˆเป€เบซเบผเบทเบญเบ‚เบญเบ‡เปเบ–เบง
s/^(\w+)(.*)/ lc($1). " : " . length($2) /meg;

เบ„เปเบฒเป€เบซเบฑเบ™เบžเบฒเบเปƒเบ™ Regex
เบ•เบปเบงเปเบเป‰เป„เบ‚ "/x" เป€เบฎเบฑเบ”เปƒเบซเป‰เบŠเปˆเบญเบ‡เบซเบงเปˆเบฒเบ‡เบ–เบทเบเบฅเบฐเป€เบฅเบตเบเปƒเบ™เบฎเบนเบšเปเบšเบš regex (เบเบปเบเป€เบงเบฑเป‰เบ™เปƒเบ™ a
เบซเป‰เบญเบ‡เบฎเบฝเบ™เบ•เบปเบงเบญเบฑเบเบชเบญเบ™เปเบฅเบฐเบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบญเบทเปˆเบ™เป†เบˆเปเบฒเบ™เบงเบ™เบซเบ™เป‰เบญเบ), เปเบฅเบฐเบเบฑเบ‡เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบ„เปเบฒเป€เบซเบฑเบ™เบ›เบปเบเบเบฐเบ•เบด
เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™. เบ•เบฒเบกเบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบˆเบดเบ™เบ•เบฐเบ™เบฒเบเบฒเบ™, เบŠเปˆเบญเบ‡เบซเบงเปˆเบฒเบ‡เปเบฅเบฐเบ„เปเบฒเป€เบซเบฑเบ™เบŠเปˆเบงเบเบซเบผเบฒเบ.

"/x" เปƒเบซเป‰เบ—เปˆเบฒเบ™เป€เบ›เบตเบ”เบญเบฑเบ™เบ™เบตเป‰:

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

เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ™เบตเป‰:

s{ < # เบงเบปเบ‡เป€เบฅเบฑเบšเบกเบธเบกเป€เบ›เบตเบ”
(?: # non-backreffing grouping paren
[^>'"] * # 0 เบซเบผเบทเบซเบผเบฒเบเบเบงเปˆเบฒเบชเบดเปˆเบ‡เบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™ > เบซเบผเบท ' เบซเบผเบท "
| # เบซเบผเบทเบญเบทเปˆเบ™เป†
".*?" # เบชเปˆเบงเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบงเบปเบ‡เบขเบทเบกเบ„เบนเปˆ (เบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเบ—เบตเปˆเบ‚เบตเป‰เบ„เป‰เบฒเบ™)
| # เบซเบผเบทเบญเบทเปˆเบ™เป†
'.*?' # เบชเปˆเบงเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบ„เบณเป€เบงเบปเป‰เบฒเบ”เบฝเบง (เบเบปเบ‡เบเบฑเบ™เบ—เบตเปˆเบ‚เบตเป‰เบ„เป‰เบฒเบ™)
) + # เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบถเป‰เบ™เบซเบ™เบถเปˆเบ‡เบซเบผเบทเบซเบผเบฒเบเบ„เบฑเป‰เบ‡
> # เบงเบปเบ‡เป€เบฅเบฑเบšเบ›เบดเบ”
}{}gsx; # เปเบ—เบ™เบ—เบตเปˆเบšเปเปˆเบกเบตเบซเบเบฑเบ‡, ie เบฅเบถเบš

เบกเบฑเบ™เบเบฑเบ‡เบšเปเปˆเบŠเบฑเบ”เป€เบˆเบ™เบซเบผเบฒเบเป€เบ›เบฑเบ™ prose, เปเบ•เปˆเบกเบฑเบ™เป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบซเบผเบฒเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบญเบฐเบ—เบดเบšเบฒเบ
เบ„เบงเบฒเบกเบซเบกเบฒเบเบ‚เบญเบ‡เปเบ•เปˆเบฅเบฐเบชเปˆเบงเบ™เบ‚เบญเบ‡เบฎเบนเบšเปเบšเบš.

เบ•เบปเบงเบ‚เบฑเป‰เบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™
เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเบžเบงเบเป€เบฎเบปเบฒเบ„เบดเบ”เป€เบ–เบดเบ‡เบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบ–เบทเบเบˆเปเบฒเบเบฑเบ”เบ”เป‰เบงเบเบ•เบปเบงเบญเบฑเบเบชเบญเบ™ "/", เบžเบงเบเบกเบฑเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰
เบ–เบทเบเบˆเปเบฒเบเบฑเบ”เป‚เบ”เบเป€เบเบทเบญเบšเบ—เบธเบเบ•เบปเบงเบญเบฑเบเบชเบญเบ™. perlre เบญเบฐเบ—เบดเบšเบฒเบเบ™เบตเป‰. เบ•เบปเบงเบขเปˆเบฒเบ‡, "s///"
เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เปƒเบŠเป‰เบงเบปเบ‡เป€เบฅเบฑเบšเป€เบ›เบฑเบ™เบ•เบปเบงเบ‚เบฑเป‰เบ™. เบเบฒเบ™เป€เบฅเบทเบญเบเบ•เบปเบงเบ‚เบฑเป‰เบ™เบญเบทเปˆเบ™เบชเบฒเบกเบฒเบ”เบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบตเบ‡
เบ•เบปเบงเบ‚เบฑเป‰เบ™เบžเบฒเบเปƒเบ™เบฎเบนเบšเปเบšเบš:

s/\/ usr\/เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™/\/ usr\/share/g; # เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ•เบปเบงเบ‚เบฑเป‰เบ™เบ—เบตเปˆเบšเปเปˆเบ”เบต
s#/ usr / เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™#/ usr / share#g; # เบ”เบตเบเบงเปˆเบฒ

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเบขเปˆเบฒเบ‡เบกเบตเป€เบซเบ”เบœเบปเบ™เบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เป„เบ”เป‰เบซเบผเบฒเบเบเบงเปˆเบฒเป€เบเบปเปˆเบฒ:

s{/ usr / เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™ /}{/ usr / share}g; # เบเบฑเบ‡เบ”เบตเบเบงเปˆเบฒ

เบ‚เป‰เบญเบ เบกเบต เบšเบฑเบ™เบซเบฒเปƒเบ™เบเบฒเบ™ เบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆ เปƒเบ™เป„เบฅเบเบฐ เป€เบžเบตเปˆเบกเป€เบ•เบตเบก เบเปˆเบงเบฒ เบซเบ™เบถเปˆเบ‡ เป€เบชเบฑเป‰เบ™. เปเบกเปˆเบ™เบซเบเบฑเบ‡ เบœเบดเบ”เบšเป?
เบšเปเปˆเบงเปˆเบฒเป€เบˆเบปเป‰เบฒเบšเปเปˆเบกเบตเบซเบผเบฒเบเบเบงเปˆเบฒเปœเบถเปˆเบ‡เป€เบชเบฑเป‰เบ™เปƒเบ™เบชเบฐเบ•เบฃเบดเบ‡เบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบเบณเบฅเบฑเบ‡เป€เบšเบดเปˆเบ‡เบขเบนเปˆ (เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™), เบซเบผเบท
เบญเบทเปˆเบ™, เป€เบˆเบปเป‰เบฒเบšเปเปˆเป„เบ”เป‰เปƒเบŠเป‰เบ•เบปเบงเปเบเป‰เป„เบ‚เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เบ•เบฒเบกเบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒ (เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™).

เบกเบตเบซเบผเบฒเบเบงเบดเบ—เบตเบ—เบตเปˆเบˆเบฐเป€เบญเบปเบฒเบ‚เปเป‰เบกเบนเบ™เบซเบผเบฒเบเปเบ–เบงเป€เบ‚เบปเป‰เบฒเปƒเบ™เบชเบฐเบ•เบฃเบดเบ‡. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบซเป‰เบกเบฑเบ™เป€เบเบตเบ”เบ‚เบถเป‰เบ™
เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบญเปˆเบฒเบ™เบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡ $/ (เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™ '' เบชเปเบฒเบฅเบฑเบšเบงเบฑเบเบซเบผเบท
"undef" เบชเปเบฒเบฅเบฑเบšเป„เบŸเบฅเปŒเบ—เบฑเบ‡เบซเบกเบปเบ”) เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เบซเบผเบฒเบเบเบงเปˆเบฒเบซเบ™เบถเปˆเบ‡เปเบ–เบงเปƒเบ™เป€เบงเบฅเบฒเบ™เบฑเป‰เบ™.

เบญเปˆเบฒเบ™ perlre เป€เบžเบทเปˆเบญเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบงเปˆเบฒ "/s" เปเบฅเบฐ "/m" (เบซเบผเบทเบ—เบฑเบ‡เบชเบญเบ‡) เบ—เบตเปˆเบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบŠเป‰:
"/s" เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบˆเบธเบ”เป€เบžเบทเปˆเบญเบฅเบงเบกเป€เบญเบปเบฒเป€เบชเบฑเป‰เบ™เปƒเบซเบกเปˆ, เปเบฅเบฐ "/m" เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰ cart เปเบฅเบฐเป€เบ‡เบดเบ™เป‚เบ”เบฅเบฒเบเบปเบ‡เบเบฑเบ™เบเบฑเบš a.
newline, เบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเบขเบนเปˆเปƒเบ™เบ•เบญเบ™เบ—เป‰เบฒเบเบ‚เบญเบ‡เบชเบฒเบ. เบ—เปˆเบฒเบ™ เบˆเบณ เป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบงเปˆเบฒเบ—เปˆเบฒเบ™เป„เบ”เป‰เบ•เบปเบงเบˆเบดเบ‡เปเบฅเป‰เบง
เบกเบตเบชเบฒเบเบซเบผเบฒเบเปเบ–เบงเบขเบนเปˆเปƒเบ™เบ™เบฑเป‰เบ™.

เบ•เบปเบงเบขเปˆเบฒเบ‡, เป‚เบ„เบ‡เบเบฒเบ™เบ™เบตเป‰เบเบงเบ”เบžเบปเบšเบ„เปเบฒเบ—เบตเปˆเบŠเป‰เปเบฒเบเบฑเบ™, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบžเบงเบเป€เบ‚เบปเบฒเบ‚เบฐเบซเบเบฒเบเป€เบชเบฑเป‰เบ™เปเบšเปˆเบ‡ (เปเบ•เปˆ
เบšเปเปˆเปเบกเปˆเบ™เบงเบฑเบ). เบ•เบปเบงเบขเปˆเบฒเบ‡เบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™ "/s" เป€เบžเบฒเบฐเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเป„เบ”เป‰เปƒเบŠเป‰เบˆเบธเบ”เปƒเบ™ a
เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ›เบปเบเบเบฐเบ•เบดเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบ‚เป‰เบฒเบกเป€เบชเบฑเป‰เบ™เบŠเบฒเบเปเบ”เบ™. เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™ "/m" เป€เบžเบฒเบฐเบงเปˆเบฒ
เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบšเปเปˆโ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™ cart เบซเบผเบทโ€‹เป€เบ‡เบดเบ™โ€‹เป‚เบ”โ€‹เบฅเบฒโ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบเบปเบ‡โ€‹เบเบฑเบ™โ€‹เปƒเบ™โ€‹เบˆเบธเบ”โ€‹เปƒเบ”โ€‹เบซเบ™เบถเปˆเบ‡โ€‹เปƒเบ™โ€‹เบšเบฑเบ™โ€‹เบ—เบถเบโ€‹เบเบฒเบ™โ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เบเบฑเบšโ€‹เบชเบฒเบโ€‹เปƒเบซเบกเปˆโ€‹.
เปเบ•เปˆเบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ—เบตเปˆ $/ เบ–เบทเบเบ•เบฑเป‰เบ‡เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบญเบทเปˆเบ™เบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบšเปเปˆ
เบ•เบปเบงเบˆเบดเบ‡เปเบฅเป‰เบงเป€เบ„เบตเบเบกเบตเบšเบฑเบ™เบ—เบถเบเบซเบผเบฒเบเปเบ–เบงเบญเปˆเบฒเบ™เบขเบนเปˆเปƒเบ™.

$/ = ''; # เบญเปˆเบฒเบ™เบ—เบฑเบ‡เบซเบเปเป‰เปœเป‰เบฒ, เบšเปเปˆเปเบกเปˆเบ™เปเบ•เปˆเปเบ–เบงเบ”เบฝเบง
เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ ( <> ) {
เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ ( /\b([\w'-]+)(\s+\g1)+\b/gi ) { # เบ„เปเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ alpha
เบžเบดเบก "เบŠเปเป‰เบฒเบเบฑเบ™ $1 เบขเบนเปˆเบงเบฑเบ $.\n";
}
}

เบ™เบตเป‰เปเบกเปˆเบ™เบฅเบฐเบซเบฑเบ”เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเบŠเบญเบเบซเบฒเบ›เบฐเป‚เบซเบเบเบ—เบตเปˆเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบ "เบˆเบฒเบ" (เป€เบŠเบดเปˆเบ‡เบˆเบฐเบ–เบทเบเบ—เปเบฒเบฅเบฒเบเป‚เบ”เบ
mailers เบซเบผเบฒเบ):

$/ = ''; # เบญเปˆเบฒเบ™เบ—เบฑเบ‡เบซเบเปเป‰เปœเป‰เบฒ, เบšเปเปˆเปเบกเปˆเบ™เปเบ•เปˆเปเบ–เบงเบ”เบฝเบง
เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ ( <> ) {
เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ ( /^From /gm ) { # /m เป€เบฎเบฑเบ”เปƒเบซเป‰ ^ เบเบปเบ‡เบเบฑเบš \n
เบžเบดเบก "เบ™เปเบฒเบกเบฒเบˆเบฒเบเบงเบฑเบ $.\n";
}
}

เบ™เบตเป‰เปเบกเปˆเบ™เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบŠเบญเบเบซเบฒเบ—เบธเบเบขเปˆเบฒเบ‡เบฅเบฐเบซเบงเปˆเบฒเบ‡ START เปเบฅเบฐ END เปƒเบ™เบงเบฑเบ:

undef $/; # เบญเปˆเบฒเบ™เปƒเบ™เป„เบŸเบฅเปŒเบ—เบฑเบ‡เบซเบกเบปเบ”, เบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเบซเบ™เบถเปˆเบ‡เปเบ–เบงเบซเบผเบทเบงเบฑเบ
เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ ( <> ) {
เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ ( /START.*?)END/sgm ) { # /s เป€เบฎเบฑเบ”เปƒเบซเป‰ . เป€เบชเบฑเป‰เบ™โ€‹เบŠเบฒเบโ€‹เปเบ”เบ™โ€‹เบ‚เป‰เบฒเบกโ€‹
เบžเบดเบก "$1\n";
}
}

เบงเบดเบ—เบตเบเบฒเบ™ เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰ I เบ”เบถเบ‡ เบญเบญเบ เบชเบฒเบ เบฅเบฐเบซเบงเปˆเบฒเบ‡ เบชเบญเบ‡ เบฎเบนเบšเปเบšเบšเบเบฒเบ™ เบ—เบตเปˆ เบกเบต เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡ on เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™ เบชเบฒเบ?
เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰ Perl's exotic ".." operator (เบšเบฑเบ™เบ—เบถเบเป„เบงเป‰เปƒเบ™ perlop):

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 เบเบฒเบ™เปเบ‚เปˆเบ‡เบ‚เบฑเบ™ XML, HTML, or เบญเบทเปˆเบ™เป† เบ‚เบตเป‰เบฎเป‰เบฒเบ, ugly เบชเบดเปˆเบ‡เบ—เบตเปˆ เบเบฑเบš a regex?
เบขเปˆเบฒเปƒเบŠเป‰ regexes. เปƒเบŠเป‰เป‚เบกเบ”เบนเบ™เปเบฅเบฐเบฅเบทเบกเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ›เบปเบเบเบฐเบ•เบด. เป„เบ”เป‰
XML::LibXML, HTML::TokeParser เปเบฅเบฐ HTML::เป‚เบกเบ”เบนเบ™ TreeBuilder เปเบกเปˆเบ™เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ—เบตเปˆเบ”เบต, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเปเบ•เปˆเบฅเบฐเบญเบฑเบ™.
namespace เบกเบตเป‚เบกเบ”เบนเบ™ parsing เบญเบทเปˆเบ™เป†เบžเบดเป€เบชเบ”เบชเปเบฒเบฅเบฑเบšเบงเบฝเบเบ‡เบฒเบ™เบชเบฐเป€เบžเบฒเบฐเปƒเบ”เบซเบ™เบถเปˆเบ‡เปเบฅเบฐเบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบ‚เบญเบ‡
เป€เบฎเบฑเบ”เบกเบฑเบ™. เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ—เบตเปˆ CPAN Search (http://metacpan.org/> ) เปเบฅเบฐเบชเบดเปˆเบ‡เบกเบฐเบซเบฑเบ”เปƒเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ—เบฑเบ‡เบซเบกเบปเบ”
เบ›เบฐเบŠเบฒเบŠเบปเบ™เป„เบ”เป‰เป€เบฎเบฑเบ”เบชเปเบฒเบฅเบฑเบšเบ—เปˆเบฒเบ™เปเบฅเป‰เบง! :)

I เป€เบญเบปเบฒเปƒเบˆเปƒเบชเปˆ a เบ›เบปเบเบเบฐเบ•เบด เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบ เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ $/ เปเบ•เปˆ it เบšเปเปˆเป„เบ”เป‰ เป€เบฎเบฑเบ”เบงเบฝเบ. เปเบกเปˆเบ™เบซเบเบฑเบ‡ เบœเบดเบ”เบšเป?
$/ เบ•เป‰เบญเบ‡เป€เบ›เบฑเบ™เบชเบฐเบ•เบฃเบดเบ‡. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบ•เบปเบงเบขเปˆเบฒเบ‡เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เปเบ™เบงเบ™เบตเป‰เปเบ—เป‰เป†.

เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบ—เปˆเบฒเบ™โ€‹เบกเบต File::Stream, เบ™เบตเป‰โ€‹เปเบกเปˆเบ™โ€‹เบ‡เปˆเบฒเบโ€‹เบ”เบฒเบ.

เปƒเบŠเป‰ File::Stream;

$stream = เป„เบŸเบฅเปŒ::เบชเบฐเบ•เบฃเบตเบก->เปƒเปเปˆ(
$filehandle,
เบ•เบปเบงเปเบเบ => qr/\s*,\s*/,
);

เบžเบดเบก "$_\n" เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ <$stream>;

เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบ—เปˆเบฒเบ™โ€‹เบšเปเปˆโ€‹เบกเบต File::Stream, เบ—เปˆเบฒเบ™โ€‹เบˆเบฐโ€‹เบ•เป‰เบญเบ‡โ€‹เป€เบฎเบฑเบ”โ€‹เบงเบฝเบโ€‹เบซเบผเบฒเบโ€‹เป€เบฅเบฑเบโ€‹เบ™เป‰เบญเบโ€‹.

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบฎเบนเบšเปเบšเบšเบชเบตเปˆเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ‚เบญเบ‡ sysread เป€เบžเบทเปˆเบญเบชเบทเบšเบ•เปเปˆเป€เบžเบตเปˆเบกเปƒเบชเปˆ buffer. เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบ—เบตเปˆโ€‹เบ—เปˆเบฒเบ™
เป€เบžเบตเปˆเบกเปƒเบชเปˆ buffer, เบ—เปˆเบฒเบ™เบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบ—เปˆเบฒเบ™เบกเบตเป€เบชเบฑเป‰เบ™เบ„เบปเบšเบ–เป‰เบงเบ™เบชเบปเบกเบšเบนเบ™ (เป‚เบ”เบเบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ›เบปเบเบเบฐเบ•เบดเบ‚เบญเบ‡เบ—เปˆเบฒเบ™).

เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™ $_ = "";
while(sysread FH, $_, 8192, length ) {
เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ(s/^((?s).*?) your_pattern// ) {
$record เบ‚เบญเบ‡เบ‚เป‰เบญเบ = $1;
#เป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ‚เบญเบ‡เบขเบนเปˆเบ™เบตเป‰.
}
}

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ”เบฝเบงเบเบฑเบ™เบเบฑเบš foreach เปเบฅเบฐเบเบฒเบ™เปเบ‚เปˆเบ‡เบ‚เบฑเบ™เป‚เบ”เบเปƒเบŠเป‰เบ—เบธเบ‡ c เปเบฅเบฐเบชเบฐเบกเป \ G, เบ–เป‰เบฒ
เบ—เปˆเบฒเบ™เบšเปเปˆเบชเบปเบ™เปƒเบˆเป„เบŸเบฅเปŒเบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบขเบนเปˆเปƒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเปƒเบ™เบ•เบญเบ™เบ—เป‰เบฒเบ.

เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™ $_ = "";
while(sysread FH, $_, 8192, length ) {
foreach my $record ( m/\G((?s).*?)your_pattern/gc ) {
#เป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ‚เบญเบ‡เบขเบนเปˆเบ™เบตเป‰.
}
substr($_, 0, pos ) = "" เบ–เป‰เบฒ pos;
}

เบงเบดเบ—เบตเบเบฒเบ™ do I เบ—เบปเบ”เปเบ—เบ™ case-insensitively on เป„เบ”เป‰ LHS เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ เบ›เบปเบเบ›เบฑเบเบฎเบฑเบเบชเบฒ เบเปเบฅเบฐเบ™เบต on เป„เบ”เป‰ RHS?
เบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เปเบเป‰เป„เบ‚ Perlish เบ—เบตเปˆเบซเบ™เป‰เบฒเบฎเบฑเบเป‚เบ”เบ Larry Rosler. เบกเบฑเบ™เบ‚เบธเบ”เบ„เบปเป‰เบ™เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ‚เบญเบ‡ bitwise xor on
เบชเบฐเบ•เบฃเบดเบ‡ ASCII.

$_= "เบ™เบตเป‰เปเบกเปˆเบ™เบเปเบฅเบฐเบ™เบต TEsT";

$old = 'เบ—เบปเบ”เบชเบญเบš';
$new = 'เบ„เบงเบฒเบกเบชเบณเป€เบฅเบฑเบ”';

s{(\Q$old\E)}
{ uc $ เปƒเบซเบกเปˆ | (uc $1 ^ $1).
(uc(substr $1, -1) ^ substr $1, -1) x
(เบ„เบงเบฒเบกเบเบฒเบง($เปƒเปเปˆ) - เบ„เบงเบฒเบกเบเบฒเบง $1)
}เป€เบŠเบฑเปˆเบ™;

เบžเบดเบก;

เปเบฅเบฐเบ™เบตเป‰เปเบกเปˆเบ™เป€เบ›เบฑเบ™ subroutine, modeled เบซเบผเบฑเบ‡เบˆเบฒเบเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบ™เบตเป‰:

sub preserve_case {
เบ‚เบญเบ‡เบ‚เป‰เบญเบ ($old, $new) = @_;
my $mask = uc $old ^ $old;

uc $ เปƒเบซเบกเปˆ | $เปœเป‰เบฒเบเบฒเบ.
substr($mask, -1) x (length($new) - length($old))
}

$string = "เบ™เบตเป‰เปเบกเปˆเบ™เบเปเบฅเบฐเบ™เบต TEsT";
$string =~ s/(test)/preserve_case($1, "success")/egi;
เบžเบดเบก "$string\n";

เบ™เบตเป‰เบžเบดเบก:

เบ™เบตเป‰เปเบกเปˆเบ™เบเปเบฅเบฐเบ™เบต SucCESS

เปƒเบ™โ€‹เบ–เบฒโ€‹เบ™เบฐโ€‹เป€เบ›เบฑเบ™โ€‹เบ—เบฒเบ‡โ€‹เป€เบฅเบทเบญเบโ€‹, เป€เบžเบทเปˆเบญโ€‹เบฎเบฑเบโ€‹เบชเบฒโ€‹เบเปโ€‹เบฅเบฐโ€‹เบ™เบตโ€‹เบ‚เบญเบ‡โ€‹เบ„เปเบฒโ€‹เบ—เบปเบ”โ€‹เปเบ—เบ™โ€‹เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบกเบฑเบ™โ€‹เปเบกเปˆเบ™โ€‹เบเบฒเบงโ€‹เบเบงเปˆเบฒโ€‹
เบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบš, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบฅเบฐเบซเบฑเบ”เบ™เบตเป‰, เป‚เบ”เบ Jeff Pinyan:

sub preserve_case {
เบ‚เบญเบ‡เบ‚เป‰เบญเบ ($from, $to) = @_;
my ($lf, $lt) = เบ„เบงเบฒเบกเบเบฒเบงเปเบœเบ™เบ—เบตเปˆ, @_;

เบ–เป‰เบฒ ($lt < $lf) { $from = substr $from, 0, $lt }
else { $from .= substr $to, $lf }

เบเบฑเบšเบ„เบทเบ™ uc $to | ($from ^uc $from);
}

เบ™เบตเป‰เบ›เปˆเบฝเบ™เบ›เบฐเป‚เบซเบเบเป€เบ›เบฑเบ™ "เบ™เบตเป‰เปเบกเปˆเบ™เบเปเบฅเบฐเบ™เบต SUcCess."

เบžเบฝเบ‡เปเบ•เปˆเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒเบ™เบฑเบเบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก C เบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™ C เปƒเบ™เบžเบฒเบชเบฒเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบผเปเบเบผเบกเปƒเบ”เบเปเปˆเบ•เบฒเบก, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™ a
เบเบฒเบ™เปเบเป‰เป„เบ‚ C-like เบซเบผเบฒเบ, script เบ•เปเปˆเป„เบ›เบ™เบตเป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™เบกเบตเบเปเบฅเบฐเบ™เบตเบ”เบฝเบงเบเบฑเบ™,
เบˆเบปเบ”เบซเบกเบฒเบเบชเบฐเบšเบฑเบšเป‚เบ”เบเบˆเบปเบ”เบซเบกเบฒเบ, เป€เบ›เบฑเบ™เบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบš. (เบกเบฑเบ™เบเบฑเบ‡เป€เบเบตเบ”เบ‚เบถเป‰เบ™เบ—เบตเปˆเบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ›เบฐเบกเบฒเบ™ 240% เบŠเป‰เบฒเบเบงเปˆเบฒ
เบเบฒเบ™เปเบเป‰เป„เบ‚ Perlish เปเบฅเปˆเบ™.) เบ–เป‰เบฒเบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™เบกเบตเบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบซเบผเบฒเบเบเบงเปˆเบฒเบชเบฐเบ•เบฃเบดเบ‡
เปเบ—เบ™, เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบชเบธเบ”เบ—เป‰เบฒเบเปเบกเปˆเบ™เปƒเบŠเป‰เบชเปเบฒเบฅเบฑเบšเบชเปˆเบงเบ™เบ—เบตเปˆเป€เบซเบผเบทเบญเบ‚เบญเบ‡เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™.

# เบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบšเป‚เบ”เบ Nathan Torkington, เบ™เบงเบ”เป‚เบ”เบ Jeffrey Friedl
#
sub preserve_case
{
เบ‚เบญเบ‡เบ‚เป‰เบญเบ ($old, $new) = @_;
$state เบ‚เบญเบ‡เบ‚เป‰เบญเบ = 0; # 0 = เบšเปเปˆเบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡; 1 = lc; 2 = เบญเบ„
เบ‚เบญเบ‡เบ‚เป‰เบญเบ ($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;
} else {
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));
}
}
เบเบฑเบšเบ„เบทเบ™ $new;
}

เบงเบดเบ—เบตเบเบฒเบ™ เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰ I เป€เบฎเบฑเบ”เปƒเบซเป‰ "\w" เบเบฒเบ™เปเบ‚เปˆเบ‡เบ‚เบฑเบ™ เปเบซเปˆเบ‡เบŠเบฒเบ” เบฅเบฑเบเบชเบฐเบ™เบฐ เบŠเบธเบ”?
เปƒเบชเปˆ "เปƒเบŠเป‰เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™;" เปƒเบ™ script เบ‚เบญเบ‡เบ—เปˆเบฒเบ™. เบซเป‰เบญเบ‡เบฎเบฝเบ™เบ•เบปเบงเบญเบฑเบเบชเบญเบ™ \w เบ–เบทเบเป€เบญเบปเบฒเบกเบฒเบˆเบฒเบเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™.

เป€เบšเบดเปˆเบ‡ perlocale เบชเปเบฒเบฅเบฑเบšเบฅเบฒเบเบฅเบฐเบญเบฝเบ”.

เบงเบดเบ—เบตเบเบฒเบ™ เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰ I เบเบฒเบ™เปเบ‚เปˆเบ‡เบ‚เบฑเบ™ a locale-smart เบชเบฐเบšเบฑเบšเบžเบฒเบชเบฒ of "/[a-zA-Z]/"?
เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰ syntax เบ›เบฐเป€เบžเบ”เบ•เบปเบงเบญเบฑเบเบชเบญเบ™ POSIX "/[[:alpha:]]/" เบ—เบตเปˆเบšเบฑเบ™เบ—เบถเบเป„เบงเป‰เปƒเบ™ perlre.

เบšเปเปˆเบงเปˆเบฒเป€เบˆเบปเป‰เบฒเบˆเบฐเบขเบนเปˆเปƒเบ™เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เปƒเบ”, เบ•เบปเบงเปœเบฑเบ‡เบชเบทเปเบกเปˆเบ™เบ•เบปเบงเปœเบฑเบ‡เบชเบทเปƒเบ™ \w
เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบ•เบปเบงเป€เบฅเบเปเบฅเบฐ underscore เป„เบ”เป‰. เปƒเบ™เบ–เบฒเบ™เบฐเป€เบ›เบฑเบ™ regex, เบกเบฑเบ™เบ„เป‰เบฒเบเบ„เบท "/[^\W\d_]/". เบ‚เบญเบ‡เบกเบฑเบ™
เบเบฒเบ™เป€เบชเบตเบก, เบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™เบ•เบปเบงเบญเบฑเบเบชเบญเบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบขเบนเปˆเปƒเบ™ \W เบžเป‰เบญเบกเบเบฑเบšเบ•เบปเบงเป€เบฅเบเปเบฅเบฐ
เบ‚เบตเบ”เบเป‰เบญเบ‡, เบซเบผเบท "/[\W\d_]/".

เบงเบดเบ—เบตเบเบฒเบ™ เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰ I quote a เบ•เบปเบงเปเบ› to เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ in a regex?
Perl parser เบˆเบฐเบ‚เบฐเบซเบเบฒเบเบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบตเบ‡ $variable เปเบฅเบฐ @variable เปƒเบ™เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ›เบปเบเบเบฐเบ•เบด
เป€เบงเบฑเป‰เบ™เป€เบชเบเปเบ•เปˆเบงเปˆเบฒเบ•เบปเบงเบ‚เบฑเป‰เบ™เปเบกเปˆเบ™เป€เบ›เบฑเบ™เบงเบปเบ‡เบขเบทเบกเบ”เบฝเบง. เบˆเบทเบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™, เบ”เป‰เบฒเบ™เบ‚เบงเบฒเบกเบทเบ‚เบญเบ‡ a
"s///" เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™เปเบกเปˆเบ™เบ–เบทเบงเปˆเบฒเป€เบ›เบฑเบ™เบชเบฐเบ•เบฃเบดเบ‡เบ—เบตเปˆเบญเป‰เบฒเบ‡เบญเบตเบ‡เบชเบญเบ‡เป€เบ—เบปเปˆเบฒ (เป€เบšเบดเปˆเบ‡ perlop เบชเปเบฒเบฅเบฑเบšเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบก).
เบˆเบทเปˆเป„เบงเป‰เบงเปˆเบฒเบ•เบปเบงเบฅเบฐเบ„เบญเบ™เบžเบดเป€เบชเบ” regex เปƒเบ”เป†เบˆเบฐเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบงเบฑเป‰เบ™เป€เบชเบเปเบ•เปˆเบงเปˆเบฒเบ—เปˆเบฒเบ™เป„เบ”เป‰เบ™เปเบฒเบซเบ™เป‰เบฒ
เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™เบ”เป‰เบงเบ \Q. เบ™เบตเป‰เปเบกเปˆเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡:

$string = "Placido P. Octopus";
$regex = "P.";

$string =~ s/$regex/Polyp/;
# $string เบ”เบฝเบงเบ™เบตเป‰เปเบกเปˆเบ™ "Polypacido P. Octopus"

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒ "." เปเบกเปˆเบ™เบžเบดเป€เบชเบ”เปƒเบ™เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ›เบปเบเบเบฐเบ•เบด, เปเบฅเบฐเบชเบฒเบกเบฒเบ”เบเบปเบ‡เบเบฑเบšเบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบ”เบฝเบง, เป„เบ”เป‰
regex "P." เบ—เบตเปˆเบ™เบตเป‰เป„เบ”เป‰เบˆเบฑเบšเบ„เบนเปˆเบเบฑเบš เปƒเบ™เบชเบฒเบเบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบš.

เป€เบžเบทเปˆเบญเบซเบฅเบปเบšเบซเบ™เบตเบ„เบงเบฒเบกเบซเบกเบฒเบเบžเบดเป€เบชเบ”เบ‚เบญเบ‡ ".", เบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰ "\Q":

$string = "Placido P. Octopus";
$regex = "P.";

$string =~ s/\Q$regex/Polyp/;
# $string เบ”เบฝเบงเบ™เบตเป‰เปเบกเปˆเบ™ "Placido Polyp Octopus"

เบเบฒเบ™เปƒเบŠเป‰ "\Q" เป€เบฎเบฑเบ”เปƒเบซเป‰ <.> เปƒเบ™ regex เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบ›เบฑเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ›เบปเบเบเบฐเบ•เบด, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™.
"เบ›." เบเบปเบ‡เบเบฑเบš "P" เบ•เบฒเบกเบ”เป‰เบงเบเบˆเบธเบ”.

เปเบกเปˆเบ™โ€‹เบซเบเบฑเบ‡ is "/o" เบเปเปˆ เบชเปเบฒเบฅเบฑเบš?
(เบ›เบฐเบเบญเบšเบชเปˆเบงเบ™เป‚เบ”เบ brian d foy)

เบ•เบปเบงเป€เบฅเบทเบญเบ "/o" เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ›เบปเบเบเบฐเบ•เบด (เป€เบญเบเบฐเบชเบฒเบ™เปƒเบ™ perlop เปเบฅเบฐ perlreref) เบšเบญเบ Perl เบเบฑเบš
เบฅเบงเบšเบฅเบงเบกเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ›เบปเบเบเบฐเบ•เบดเบžเบฝเบ‡เปเบ•เปˆเบ„เบฑเป‰เบ‡เบ”เบฝเบง. เบ™เบตเป‰เปเบกเปˆเบ™เป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบžเบฝเบ‡เปเบ•เปˆเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบฎเบนเบšเปเบšเบšเบ›เบฐเบเบญเบšเบกเบต a
เบ•เบปเบงเปเบ›. Perls 5.6 เปเบฅเบฐเบ•เปเปˆเบกเบฒเบˆเบฑเบ”เบเบฒเบ™เบ™เบตเป‰เป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบ–เป‰เบฒเบฎเบนเบšเปเบšเบšเบšเปเปˆเบ›เปˆเบฝเบ™เปเบ›เบ‡.

เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบ•เบปเบงเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆ "m//", เบ•เบปเบงเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™ "s///", เปเบฅเบฐเบ›เบปเบเบเบฐเบ•เบด
expression quoting operator "qr//" เปเบกเปˆเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡ double-quotish, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ” interpolate
เบ•เบปเบงเปเบ›เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบฎเบนเบšเปเบšเบš. เป€เบšเบดเปˆเบ‡เบ„เปเบฒเบ•เบญเบšเบ‚เบญเบ‡ "เบ‚เป‰เบญเบเบชเบฒเบกเบฒเบ”เบญเป‰เบฒเบ‡เบญเบตเบ‡เบ•เบปเบงเปเบ›เป€เบžเบทเปˆเบญเปƒเบŠเป‰เปƒเบ™ a
regex?" เบชเปเบฒเบฅเบฑเบšเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบก.

เบ•เบปเบงเบขเปˆเบฒเบ‡เบ™เบตเป‰เปƒเบŠเป‰เป€เบงเบฅเบฒเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ›เบปเบเบเบฐเบ•เบดเบˆเบฒเบเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เปเบฅเบฐเบžเบดเบกเป€เบชเบฑเป‰เบ™เบ‚เบญเบ‡
เบเบฒเบ™โ€‹เบ›เป‰เบญเบ™โ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบ—เบตเปˆโ€‹เบเบปเบ‡โ€‹เบเบฑเบšโ€‹เบกเบฑเบ™โ€‹:

$pattern เบ‚เบญเบ‡เบ‚เป‰เบญเบ = shift @ARGV;

เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ ( <> ) {
เบžเบดเบกเบ–เป‰เบฒ m/$pattern/;
}

เป€เบงเบตเบŠเบฑเบ™เบ‚เบญเบ‡ Perl เบเปˆเบญเบ™ 5.6 เบˆเบฐเบฅเบงเบšเบฅเบงเบกเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ›เบปเบเบเบฐเบ•เบดเบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐ iteration,
เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒ $pattern เบšเปเปˆเป„เบ”เป‰เบ›เปˆเบฝเบ™เปเบ›เบ‡. "/o" เบˆเบฐเบ›เป‰เบญเบ‡เบเบฑเบ™เบชเบดเปˆเบ‡เบ™เบตเป‰เป‚เบ”เบเบšเบญเบ Perl เปƒเบซเป‰เบฅเบงเบšเบฅเบงเบก
เบฎเบนเบšโ€‹เปเบšเบšโ€‹เบเบฒเบ™โ€‹เบ„เบฑเป‰เบ‡โ€‹เบ—เปเบฒโ€‹เบญเบดเบ”โ€‹, เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบ™เบฑเป‰เบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบ„เบทเบ™โ€‹เปƒเบซเบกเปˆโ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เบ™เบตเป‰โ€‹:

$pattern เบ‚เบญเบ‡เบ‚เป‰เบญเบ = shift @ARGV;

เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ ( <> ) {
เบžเบดเบกเบ–เป‰เบฒ m/$pattern/o; # เบกเบตเบ›เบฐเป‚เบซเบเบ”เบชเบณเบฅเบฑเบš Perl < 5.6
}

เปƒเบ™เบฎเบธเปˆเบ™ 5.6 เปเบฅเบฐเบ•เปเปˆเบกเบฒ, Perl เบˆเบฐเบšเปเปˆเบฅเบงเบšเบฅเบงเบกเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ›เบปเบเบเบฐเบ•เบดเบ–เป‰เบฒเบ•เบปเบงเปเบ›
เบšเปเปˆเป„เบ”เป‰เบ›เปˆเบฝเบ™เปเบ›เบ‡, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบ "/o". เบกเบฑเบ™เบšเปเปˆเป€เบˆเบฑเบšเบ›เบงเบ”, เปเบ•เปˆเบกเบฑเบ™
เบšเปเปˆเป„เบ”เป‰เบŠเปˆเบงเบเบ„เบทเบเบฑเบ™. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบชเบฐเบšเบฑเบšเปƒเบ”เป†เบ‚เบญเบ‡ Perl เป€เบžเบทเปˆเบญเบฅเบงเบšเบฅเบงเบกเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ›เบปเบเบเบฐเบ•เบด
เบžเบฝเบ‡เปเบ•เปˆเบ„เบฑเป‰เบ‡เบ”เบฝเบงเป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ•เบปเบงเปเบ› (เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบฝเบ‡เปเบ•เปˆเปƒเบŠเป‰เบกเบนเบ™เบ„เปˆเบฒเป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เบ‚เบญเบ‡เบกเบฑเบ™), เบ—เปˆเบฒเบ™เบเบฑเบ‡
เบ•เป‰เบญเบ‡เบเบฒเบ™ "/o".

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ›เบปเบเบเบฐเบ•เบดเบ‚เบญเบ‡ Perl เบขเบนเปˆเบšเปˆเบญเบ™เป€เบฎเบฑเบ”เบงเบฝเบเป€เบžเบทเปˆเบญเบเบงเบ”เบชเบญเบšเบ•เบปเบงเป€เบญเบ‡เบงเปˆเบฒ Perl เปเบกเปˆเบ™เบšเป
recompiling เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ›เบปเบเบเบฐเบ•เบด. The "use re 'debug'" pragma (เบกเบฒเบžเป‰เบญเบกเบเบฑเบš Perl 5.005 เปเบฅเบฐ
เบ•เปเปˆเบกเบฒ) เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบฅเบฒเบเบฅเบฐเบญเบฝเบ”. เบ”เป‰เบงเบ Perls เบเปˆเบญเบ™ 5.6, เบ—เปˆเบฒเบ™เบ„เบงเบ™เป€เบซเบฑเบ™ "re" เบฅเบฒเบเบ‡เบฒเบ™เบงเปˆเบฒเบกเบฑเบ™
เบฅเบงเบšเบฅเบงเบกเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ›เบปเบเบเบฐเบ•เบดเปƒเบ™เปเบ•เปˆเบฅเบฐ iteration. เบ”เป‰เบงเบ Perl 5.6 เบซเบผเบทเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบ—เปˆเบฒเบ™เบ„เบงเบ™
เบžเบฝเบ‡เปเบ•เปˆเป€เบšเบดเปˆเบ‡ "re" เบฅเบฒเบเบ‡เบฒเบ™เบงเปˆเบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™ iteration เบ—เปเบฒเบญเบดเบ”.

เปƒเบŠเป‰ re 'debug';

$regex เบ‚เบญเบ‡เบ‚เป‰เบญเบ = 'Perl';
foreach ( qw(Perl Java Ruby Python) ) {
เบžเบดเบก STDERR "-" x 73, "\n";
เบžเบดเบก STDERR "เบเบณเบฅเบฑเบ‡เบžเบฐเบเบฒเบเบฒเบก $_...\n";
เบžเบดเบก STDERR "\t$_ เปเบกเปˆเบ™เบ”เบต!\n" เบ–เป‰เบฒ m/$regex/;
}

เบงเบดเบ—เบตเบเบฒเบ™ do I เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ a เบ›เบปเบเบเบฐเบ•เบด เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบ to เบญเบญเบ เปเบšเบš C เบ„เปเบฒโ€‹เป€เบซเบฑเบ™ เบˆเบฒเบ a เปเบŸเป‰เบก?
เปƒเบ™โ€‹เบ‚เบฐโ€‹เบ™เบฐโ€‹เบ—เบตเปˆโ€‹เบ™เบตเป‰โ€‹เบ•เบปเบงโ€‹เบˆเบดเบ‡โ€‹เปเบฅเป‰เบงโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป€เบฎเบฑเบ”โ€‹เป„เบ”เป‰, เบกเบฑเบ™โ€‹เป€เบ›เบฑเบ™โ€‹เบซเบผเบฒเบโ€‹เบเบฒเบโ€‹เบโ€‹เปˆโ€‹เบงเบฒโ€‹เบ—เบตเปˆโ€‹เบ—เปˆเบฒเบ™โ€‹เบ„เบดเบ”. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ™เบตเป‰
เปœเบถเปˆเบ‡ เป€เบชเบฑเป‰เบ™

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

เบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เบซเบผเบฒเบเปเบ•เปˆเบšเปเปˆเปเบกเปˆเบ™เบ—เบธเบเบเปเบฅเบฐเบ™เบต. เป€เบˆเบปเป‰เบฒเป€เบซเบฑเบ™, เบกเบฑเบ™เบ‡เปˆเบฒเบเป€เบเบตเบ™เป„เบ›เปƒเบ™เปƒเบˆเบชเปเบฒเบฅเบฑเบšเบšเบฒเบ‡เบ›เบฐเป€เบžเบ”
เป‚เบ„เบ‡เบเบฒเบ™ C, เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ, เบœเบนเป‰เบ—เบตเปˆเบกเบตเบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเป€เบ›เบฑเบ™เบ„เปเบฒเบ„เบดเบ”เบ„เปเบฒเป€เบซเบฑเบ™เปƒเบ™เบชเบฒเบเบ—เบตเปˆเบญเป‰เบฒเบ‡เบญเบตเบ‡. เบชเปเบฒเบฅเบฑเบš
เบงเปˆเบฒ, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰, เบชเป‰เบฒเบ‡เป‚เบ”เบ Jeffrey Friedl เปเบฅเบฐเบ•เปเปˆเบกเบฒเบ”เบฑเบ”เปเบเป‰เป‚เบ”เบ Fred
Curtis

$/ = undef;
$_ = <> ;
s#/\*[^*]*\*+([^/*][^*]*\*+)*/|("(\\.|[^"\\])*"|'( \\.|[^'\\])*'|.[^/"'\\]*)#เบเปเบฒเบ™เบปเบ” $2 ? $2: "" #gse;
เบžเบดเบก;

เบ™เบตเป‰, เปเบ™เปˆเบ™เบญเบ™, เบญเบฒเบ”เบˆเบฐเบ–เบทเบเบ‚เบฝเบ™เบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡เบเบฑเบšเบ•เบปเบงเปเบเป‰เป„เบ‚ "/x", เป€เบžเบตเปˆเบกเบŠเปˆเบญเบ‡เบซเบงเปˆเบฒเบ‡
เปเบฅเบฐเบ„เปเบฒเป€เบซเบฑเบ™. เปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบกเบฑเบ™เป„เบ”เป‰เบ–เบทเบเบ‚เบฐเบซเบเบฒเบ, เบกเบฒเบฅเบฐเบเบฒเบ”เบ‚เบญเบ‡ Fred Curtis.

s{
/\* ## เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡ /* ... */ เบ„เปเบฒเป€เบซเบฑเบ™
[^*]*\*+ ## เบšเปเปˆเปเบกเปˆเบ™* เบ•เบฒเบกเบ”เป‰เบงเบ 1 เบซเบผเบทเบซเบผเบฒเบเบเบงเปˆเบฒ *'s
(
[^/*][^*]*\*+
)* ## 0-or-more เบชเบดเปˆเบ‡เบ—เบตเปˆเบšเปเปˆเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบ /
## เปเบ•เปˆเบฅเบปเบ‡เบ—เป‰เบฒเบเบ”เป‰เบงเบ '*'
/ ## เบชเบดเป‰เบ™เบชเบธเบ” /* ... */ comment

| ## เบซเบผเบทเบชเบดเปˆเบ‡เบ•เปˆเบฒเบ‡เป†เบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™เบ„เปเบฒเป€เบซเบฑเบ™:

(
" ## เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡ " ... " string
(
\\. ## เปœเบต char
| ## เบซเบผเบท
[^"\\] ## เบšเปเปˆ "\
)*
" ## เบชเบดเป‰เบ™เบชเบธเบ”เบ‚เบญเบ‡ " ... " string

| ## เบซเบผเบท

' ## เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡ ' ... ' string
(
\\. ## เปœเบต char
| ## เบซเบผเบท
[^'\\] ## เบšเปเปˆเปเบกเปˆเบ™ '\
)*
' ## เบชเบดเป‰เบ™เบชเบธเบ”เบ‚เบญเบ‡ ' ... ' string

| ## เบซเบผเบท

. ## เบญเบฑเบ™เปƒเบ”เบญเบฑเบ™เปœเบถเปˆเบ‡ char
[^/"'\\]* ## เบ•เบปเบงเบญเบฑเบเบ‚เบฐเบฅเบฐเบ—เบตเปˆเบšเปเปˆเป€เบฅเบตเปˆเบกเบ„เบณเป€เบซเบฑเบ™, เบชเบฐเบ•เบฃเบดเบ‡ เบซเบผเบท เปœเบต
)
}{เบเบณเบ™เบปเบ” $2 ? $2 : ""}gxse;

เบเบฒเบ™โ€‹เบ”เบฑเบ”โ€‹เปเบเป‰โ€‹เป€เบฅเบฑเบโ€‹เบ™เป‰เบญเบโ€‹เบเบฑเบ‡โ€‹เป€เบญเบปเบฒโ€‹เบ„เปเบฒโ€‹เบ„เบดเบ”โ€‹เป€เบซเบฑเบ™ C ++โ€‹, เบญเบฒเบ”โ€‹เบˆเบฐโ€‹เบ‚เบฐโ€‹เบซเบเบฒเบโ€‹เบซเบผเบฒเบโ€‹เปเบ–เบงโ€‹เป‚เบ”เบโ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰ a
เบฅเบฑเบเบชเบฐเบ™เบฐเบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡:

s#/\*[^*]*\*+([^/*][^*]*\*+)*/|//([^\\]|[^\n][\n]? )*?\n|("(\\.|[^"\\])*"|'(\\.|[^'\\])*'|.[^/"'\\]*) #เบเบณเบ™เบปเบ” $3 ? $3: "" #gse;

เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰ I เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ Perl เบ›เบปเบเบเบฐเบ•เบด expressions to เบเบฒเบ™เปเบ‚เปˆเบ‡เบ‚เบฑเบ™ เบชเบปเบกเบ”เบธเบ™ เบ‚เปเป‰โ€‹เบ„เบงเบฒเบก?
(เบ›เบฐเบเบญเบšเบชเปˆเบงเบ™เป‚เบ”เบ brian d foy)

เบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™เบ‚เปเป‰เบ„เบงเบฒเบก::เป‚เบกเบ”เบนเบ™เบ—เบตเปˆเบชเบปเบกเบ”เบธเบ™, เป€เบŠเบดเปˆเบ‡เบขเบนเปˆเปƒเบ™เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ Perl
เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆ Perl 5.8. เบกเบฑเบ™เบกเบตเบซเบ™เป‰เบฒเบ—เบตเปˆเบซเบฅเบฒเบเบซเบฅเบฒเบเป€เบžเบทเปˆเบญเบˆเบฑเบ”เบเบฒเบ™เบเบฑเบšเบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบซเบเบธเป‰เบ‡เบเบฒเบ. เป„เบ”เป‰
Regexp::เป‚เบกเบ”เบนเบ™เบ—เบปเปˆเบงเป„เบ›เบชเบฒเบกเบฒเบ”เบŠเปˆเบงเบเป„เบ”เป‰เป‚เบ”เบเบเบฒเบ™เบชเบฐเบซเบ™เบญเบ‡เบฎเบนเบšเปเบšเบšเบเบฐเบ›เป‹เบญเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰.

เปƒเบ™เบ–เบฒเบ™เบฐเป€เบ›เบฑเบ™ Perl 5.10, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบˆเบฑเบšเบ„เบนเปˆเบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบชเบปเบกเบ”เบนเบ™เบเบฑเบšเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ›เบปเบเบเบฐเบ•เบดเป‚เบ”เบเปƒเบŠเป‰ recursive
เบฎเบนเบšเปเบšเบš. เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐ Perl 5.10, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰ resort เบเบฑเบš tricks เบ•เปˆเบฒเบ‡เป†เป€เบŠเบฑเปˆเบ™: เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบฅเบฐเบซเบฑเบ” Perl เปƒเบ™
"(??{})" เบฅเบณเบ”เบฑเบš.

เบ™เบตเป‰เปเบกเปˆเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเปƒเบŠเป‰เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ›เบปเบเบเบฐเบ•เบด recursive. เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเปเบกเปˆเบ™เป€เบžเบทเปˆเบญเป€เบเบฑเบšเบเปเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡
เบ‚เปเป‰เบ„เบงเบฒเบกเบžเบฒเบเปƒเบ™เบงเบปเบ‡เป€เบฅเบฑเบšเบกเบธเบก, เบฅเบงเบกเบ—เบฑเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเปƒเบ™เบงเบปเบ‡เป€เบฅเบฑเบšเบกเบธเบกเบ—เบตเปˆเบŠเป‰เบญเบ™เบเบฑเบ™. เบ‚เปเป‰เบ„เบงเบฒเบกเบ•เบปเบงเบขเปˆเบฒเบ‡เบ™เบตเป‰
เบกเบตเบชเบญเบ‡เบเบธเปˆเบก "เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™": เบเบธเปˆเบกเบ—เบตเปˆเบกเบตเบฅเบฐเบ”เบฑเบšเบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบฎเบฑเบ‡เปเบฅเบฐเบเบธเปˆเบกเบ—เบตเปˆเบกเบตเบชเบญเบ‡เบฅเบฐเบ”เบฑเบšเบ‚เบญเบ‡
เบฎเบฑเบ‡. เบกเบตเบซเป‰เบฒเบเบธเปˆเบกเบ—เบฑเบ‡เปเบปเบ”เปƒเบ™เบงเบปเบ‡เป€เบฅเบฑเบšเบกเบธเบก:

เบ‚เป‰เบญเบเบกเบตเบšเบฒเบ‡ > เปเบฅเบฐ
> >
เปเบฅเบฐเบ™เบฑเป‰เบ™เปเบกเปˆเบ™เบกเบฑเบ™.

เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ›เบปเบเบเบฐเบ•เบดเป€เบžเบทเปˆเบญเปƒเบซเป‰เบเบปเบ‡เบเบฑเบšเบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบชเบปเบกเบ”เบนเบ™เปƒเบŠเป‰เบชเบญเบ‡เปƒเบซเบกเปˆ (เป€เบ–เบดเบ‡ Perl 5.10) เบ›เบปเบเบเบฐเบ•เบด
เบฅเบฑเบเบชเบฐเบ™เบฐเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบ. เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เป„เบ”เป‰เบเบงเบกเป€เบญเบปเบฒเปƒเบ™ perlre เปเบฅเบฐเบ•เบปเบงเบขเปˆเบฒเบ‡เบ™เบตเป‰เปเบกเปˆเบ™เบชเบฐเบšเบฑเบšเบ”เบฑเบ”เปเบเป‰เบ‚เบญเบ‡
เบซเบ™เบถเปˆเบ‡เปƒเบ™เป€เบญเบเบฐเบชเบฒเบ™เบ™เบฑเป‰เบ™.

เบ—เปเบฒเบญเบดเบ”, เบเบฒเบ™เป€เบžเบตเปˆเบก "+" เบ—เบตเปˆเบ„เบญเบšเบ„เบญเบ‡เปƒเบซเบกเปˆเปƒเบชเปˆเบเบฑเบšเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบ›เบฐเบฅเบดเบกเบฒเบ™เปƒเบ”เป†เบ—เบตเปˆเบŠเบญเบเบซเบฒเบ„เปเบฒเบ—เบตเปˆเบเบฒเบงเบ—เบตเปˆเบชเบธเบ”เปเบฅเบฐเป€เบฎเบฑเบ”เป„เบ”เป‰
เบšเปเปˆ backtrack. เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบˆเบฑเบ”เบเบฒเบ™เบงเบปเบ‡เป€เบฅเบฑเบšเบกเบธเบกเปƒเบ”เป‚เบ”เบเบœเปˆเบฒเบ™เบเบฒเบ™
recursion, เบšเปเปˆ backtracking. เบเบธเปˆเบก "[^<>]++" เบŠเบญเบเบซเบฒเปœเบถเปˆเบ‡ เบซเบผเบท เบซเบผเบฒเบเบงเบปเบ‡เป€เบฅเบฑเบšเบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™เบกเบธเบก
เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™ backtracking.

เบญเบฑเบ™เบ—เบตเบชเบญเบ‡, "(?PARNO)" เปƒเปเปˆเบซเบกเบฒเบเป€เบ–เบดเบ‡เบฎเบนเบšเปเบšเบšเบเปˆเบญเบเปƒเบ™เบเบธเปˆเบกเบเบฒเบ™เบˆเบฑเบšเบžเบฒเบšเบชเบฐเป€เบžเบฒเบฐเบ—เบตเปˆเบกเบญเบšเปƒเบซเป‰
เป‚เบ”เบ "PARNO". เปƒเบ™ regex เบ•เปเปˆเป„เบ›เบ™เบตเป‰, เบเบธเปˆเบก capture เบ—เปเบฒเบญเบดเบ”เบŠเบญเบเบซเบฒ (เปเบฅเบฐเบˆเบทเปˆ) เป„เบ”เป‰
เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบชเบปเบกเบ”เบนเบ™, เปเบฅเบฐเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบฎเบนเบšเปเบšเบšเบ”เบฝเบงเบเบฑเบ™เบ™เบฑเป‰เบ™เบžเบฒเบเปƒเบ™ buffer เบ—เปเบฒเบญเบดเบ”เป€เบžเบทเปˆเบญเบœเปˆเบฒเบ™
เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบŠเป‰เบญเบ™เบเบฑเบ™. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™เบžเบฒเบเบชเปˆเบงเบ™ recursive. "(?1)" เปƒเบŠเป‰เบฎเบนเบšเปเบšเบšเปƒเบ™เบเบฒเบ™เบˆเบฑเบšเบžเบฒเบšเบžเบฒเบเบ™เบญเบ
เบเบธเปˆเบกเป€เบ›เบฑเบ™เบžเบฒเบเบชเปˆเบงเบ™เป€เบญเบเบฐเบฅเบฒเบ”เบ‚เบญเบ‡ regex.

เป€เบญเบปเบฒเบกเบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบฎเปˆเบงเบกเบเบฑเบ™, เบ—เปˆเบฒเบ™เบกเบต:

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

$string เบ‚เบญเบ‡เบ‚เป‰เบญเบ =<<"เบ—เบตเปˆเบ™เบตเป‰";
เบ‚เป‰เบญเบเบกเบตเบšเบฒเบ‡ > เปเบฅเบฐ
> >
เปเบฅเบฐเบ™เบฑเป‰เบ™เปเบกเปˆเบ™เบกเบฑเบ™.
เบ—เบตเปˆเบ™เบตเป‰

@groups เบ‚เบญเบ‡เบ‚เป‰เบญเบ = $string =~ m/
(#เป€เบฅเบตเปˆเบกเบˆเบฑเบšเบเบธเปˆเบก 1
< # เบเบปเบ‡เบเบฑเบšเบงเบปเบ‡เป€เบฅเบฑเบšเบกเบธเบกเป€เบ›เบตเบ”
(?:
[^<>]++ # เบงเบปเบ‡เป€เบฅเบฑเบšเบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™เบกเบธเบกเปœเบถเปˆเบ‡ เบซเบผเบทเบซเบผเบฒเบเบญเบฑเบ™, เบšเปเปˆเปเบกเปˆเบ™เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบซเบผเบฑเบ‡
|
(?1) # เบžเบปเบš < เบซเบผเบท >, เบชเบฐเบ™เบฑเป‰เบ™ recurse เป€เบžเบทเปˆเบญเบˆเบฑเบšเบเบธเปˆเบก 1
)*
> # เบˆเบฑเบšเบ„เบนเปˆเบงเบปเบ‡เป€เบฅเบฑเบšเบกเบธเบกเบ›เบดเบ”
) # เบชเบดเป‰เบ™เบชเบธเบ”เบเบฒเบ™เบˆเบฑเบšเบเบธเปˆเบก 1
/xg;

$" = "\n\t";
เบžเบดเบก "เบžเบปเบš:\n\t@groups\n";

เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒ Perl เบžเบปเบšเป€เบซเบฑเบ™เบชเบญเบ‡เบเบธเปˆเบกเปƒเบซเบเปˆ:

เบžเบปเบš:
>
> >

เบ”เป‰เบงเบเบงเบฝเบเบžเบดเป€เบชเบ”เป€เบฅเบฑเบเบ™เป‰เบญเบ, เป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป€เบญเบปเบฒเบเบธเปˆเบกเบ—เบฑเบ‡เปเบปเบ”เปƒเบ™เบงเบปเบ‡เป€เบฅเบฑเบšเบกเบธเบกเป„เบ”เป‰เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบขเบนเปˆเบเปเบ•เบฒเบก
เปƒเบ™เบงเบปเบ‡เป€เบฅเบฑเบšเบกเบธเบกเบญเบทเปˆเบ™เป†เป€เบŠเบฑเปˆเบ™เบเบฑเบ™. เปเบ•เปˆเบฅเบฐเบ„เบฑเป‰เบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เปเบ‚เปˆเบ‡เบ‚เบฑเบ™เบ—เบตเปˆเบชเบปเบกเบ”เบนเบ™, เป€เบญเบปเบฒเบ”เป‰เบฒเบ™เบ™เบญเบเบ‚เบญเบ‡เบกเบฑเบ™เบญเบญเบ
เบ•เบปเบงเบ‚เบฑเป‰เบ™ (เบ™เบฑเป‰เบ™เปเบกเปˆเบ™เบญเบฑเบ™เบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบซเบฒเบเปเบˆเบฑเบšเบ„เบนเปˆเบเบฑเบ™เปเบฅเป‰เบง เบขเปˆเบฒเบˆเบฑเบšเบ„เบนเปˆเบกเบฑเบ™เบญเบตเบ) เปเบฅเบฐเป€เบžเบตเปˆเบกเปƒเบชเปˆเบ„เบดเบง.
เบ‚เบญเบ‡เบชเบฒเบเบ—เบตเปˆเบˆเบฐเบ›เบฐเบกเบงเบ™เบœเบปเบ™. เบชเบทเบšเบ•เปเปˆเป€เบฎเบฑเบ”เบกเบฑเบ™เบˆเบปเบ™เบเบงเปˆเบฒเป€เบˆเบปเป‰เบฒเบˆเบฐเบšเปเปˆเบกเบตเบเบฒเบ™เปเบ‚เปˆเบ‡เบ‚เบฑเบ™:

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

@queue เบ‚เบญเบ‡เบ‚เป‰เบญเบ =<< "เบ—เบตเปˆเบ™เบตเป‰";
เบ‚เป‰เบญเบเบกเบตเบšเบฒเบ‡ > เปเบฅเบฐ
> >
เปเบฅเบฐเบ™เบฑเป‰เบ™เปเบกเปˆเบ™เบกเบฑเบ™.
เบ—เบตเปˆเบ™เบตเป‰

$regex เบ‚เบญเบ‡เบ‚เป‰เบญเบ = qr/
(# เบˆเบธเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡เบงเบปเบ‡เป€เบฅเบฑเบš 1
< # เบเบปเบ‡เบเบฑเบšเบงเบปเบ‡เป€เบฅเบฑเบšเบกเบธเบกเป€เบ›เบตเบ”
(?:
[^<>]++ # เบงเบปเบ‡เป€เบฅเบฑเบšเบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™เบกเบธเบกเปœเบถเปˆเบ‡ เบซเบผเบทเบซเบผเบฒเบเบญเบฑเบ™, เบšเปเปˆเปเบกเปˆเบ™เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบซเบผเบฑเบ‡
|
(?1) # recurse เบเบฑเบšเบงเบปเบ‡เป€เบฅเบฑเบš 1
)*
> # เบˆเบฑเบšเบ„เบนเปˆเบงเบปเบ‡เป€เบฅเบฑเบšเบกเบธเบกเบ›เบดเบ”
) # เบ—เป‰เบฒเบเบ‚เบญเบ‡เบงเบปเบ‡เป€เบฅเบฑเบš 1
/x;

$" = "\n\t";

เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ ( @queue ) {
$string เบ‚เบญเบ‡เบ‚เป‰เบญเบ = shift @queue;

@groups เบ‚เบญเบ‡เบ‚เป‰เบญเบ = $string =~ m/$regex/g;
เบžเบดเบก "เบžเบปเบš:\n\t@groups\n\n" เบ–เป‰เบฒ @groups;

unshift @queue, เปเบœเบ™เบ—เบตเปˆ { s/^ $//; $_ } @groups;
}

เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เบเบธเปˆเบก. เบเบฒเบ™โ€‹เปเบ‚เปˆเบ‡โ€‹เบ‚เบฑเบ™โ€‹เบžเบฒเบโ€‹เบ™เบญเบโ€‹เบชเบธเบ”โ€‹เบชเบฐโ€‹เปเบ”เบ‡โ€‹เปƒเบซเป‰โ€‹เป€เบซเบฑเบ™โ€‹เป€เบ–เบดเบ‡โ€‹เบ—เปเบฒโ€‹เบญเบดเบ”โ€‹เปเบฅเบฐโ€‹เบฎเบฑเบ‡โ€‹
เบเบฒเบ™เปเบ‚เปˆเบ‡เบ‚เบฑเบ™เบ›เบฐเบเบปเบ”เบ‚เบถเป‰เบ™เบžเบฒเบเบซเบผเบฑเบ‡:

เบžเบปเบš:
>
> >

เบžเบปเบš:


เบžเบปเบš:
>

เบžเบปเบš:


เปเบกเปˆเบ™โ€‹เบซเบเบฑเบ‡ เบšเปเปˆ it เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒ เบ—เบตเปˆ regexes เบกเบต เป‚เบฅเบš? เบงเบดเบ—เบตเบเบฒเบ™ เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰ I เป„เบ”เป‰เบฎเบฑเบš เบ›เบฐเบกเบฒเบ™ เบกเบฑเบ™เบšเปเปˆ?
เบ„เบปเบ™เบชเปˆเบงเบ™เปƒเบซเบเปˆเบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒ regexes greedy เบเบปเบ‡เบเบฑเบšเบซเบผเบฒเบเป€เบ—เบปเปˆเบฒเบ—เบตเปˆเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰. เป€เบงเบปเป‰เบฒเบ—เบฒเบ‡เบงเบดเบŠเบฒเบเบฒเบ™,
เบ•เบปเบงเบˆเบดเบ‡เปเบฅเป‰เบงเบกเบฑเบ™เปเบกเปˆเบ™เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบ›เบฐเบฅเบดเบกเบฒเบ™ ("?", "*", "+", "{}") เบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเป‚เบฅเบšเบกเบฒเบเบเบงเปˆเบฒเบ—เบฑเบ‡เปเบปเบ”.
เบฎเบนเบšเปเบšเบš; Perl เบกเบฑเบเบ„เบงเบฒเบกเป‚เบฅเบšเปƒเบ™เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เปเบฅเบฐเบ„เบงเบฒเบกเบžเปเปƒเบˆเปƒเบ™เบ—เบฑเบ™เบ—เบตเบ•เปเปˆเบเบฑเบšเบ„เบงเบฒเบกเป‚เบฅเบšเป‚เบ”เบเบฅเบงเบก. เป„เบ”เป‰โ€‹เบฎเบฑเบš
เบชเบฐเบšเบฑเบšเบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™ greedy เบ‚เบญเบ‡เบ›เบฐเบฅเบดเบกเบฒเบ™เบ”เบฝเบงเบเบฑเบ™, เปƒเบŠเป‰ ("??", "*?", "+?", "{}?").

เบ•เบปเบงเบขเปˆเบฒเบ‡:

my $s1 = my $s2 = "เบ‚เป‰เบญเบเปœเบฒเบงเบซเบผเบฒเบ";
$s1 =~ s/ve.*y //; #เบ‚เป‰เบญเบเปœเบฒเบง
$s2 =~ s/ve.*?y //; #เบ‚เป‰เบญเบเปœเบฒเบงเบซเบผเบฒเบ

เบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เบงเบดเบ—เบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ—เบ™เบ—เบตเบชเบญเบ‡เบขเบธเบ”เบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเบ—เบฑเบ™เบ—เบตเบ—เบตเปˆเบกเบฑเบ™เบžเบปเบšเบเบฑเบš "y". เป„เบ”เป‰
"*?" quantifier เบ›เบฐเบชเบดเบ”เบ—เบดเบœเบปเบ™เบšเบญเบเป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ›เบปเบเบเบฐเบ•เบดเป€เบžเบทเปˆเบญเบŠเบญเบเบซเบฒเบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเป„เบ”เป‰เป„เบง
เป€เบ›เบฑเบ™โ€‹เป„เบ›โ€‹เป„เบ”เป‰โ€‹เปเบฅเบฐโ€‹เบœเปˆเบฒเบ™โ€‹เบเบฒเบ™โ€‹เบ„เบงเบšโ€‹เบ„เบธเบกโ€‹เปƒเบ™โ€‹เบญเบฑเบ™โ€‹เปƒเบ”โ€‹เบเปโ€‹เบ•เบฒเบกโ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เปƒเบ™โ€‹เป€เบชเบฑเป‰เบ™โ€‹, เบ”เบฑเปˆเบ‡โ€‹เบ—เบตเปˆโ€‹เบ—เปˆเบฒเบ™โ€‹เบˆเบฐโ€‹เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบ—เปˆเบฒเบ™โ€‹เป€เบ›เบฑเบ™โ€‹
เบกเบฑเบเบซเบผเบตเป‰เบ™เบกเบฑเบ™เบ•เบปเป‰เบ™.

เบงเบดเบ—เบตเบเบฒเบ™ do I เบ‚เบฐเบšเบงเบ™เบเบฒเบ™ เปเบ•เปˆเบฅเบฐเบ„เบปเบ™ เบ„เปเบฒ on เปเบ•เปˆเบฅเบฐเบ„เบปเบ™ เบชเบฒเบ?
เปƒเบŠเป‰เบŸเบฑเบ‡เบŠเบฑเบ™เบเบฒเบ™เปเบšเปˆเบ‡เบ›เบฑเบ™:

เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ (<>) {
foreach my $word (เปเบเบ) {
# เป€เบฎเบฑเบ”เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ”เป‰เบงเบ $word เบ—เบตเปˆเบ™เบตเป‰
}
}

เปƒเบซเป‰เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบ™เบตเป‰เบšเปเปˆเปเบกเปˆเบ™เบ„เปเบฒเบชเบฑเบšเปƒเบ™เบ„เบงเบฒเบกเบซเบกเบฒเบเบžเบฒเบชเบฒเบญเบฑเบ‡เบเบดเบ”เปเบ—เป‰เป†; เบกเบฑเบ™เป€เบ›เบฑเบ™เบžเบฝเบ‡เปเบ•เปˆ chunks เบ‚เบญเบ‡เบ•เบดเบ”เบ•เปเปˆเบเบฑเบ™
เบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™เบเบฐเบซเบงเปˆเบฒเบ‡.

เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบฅเปเบฒเบ”เบฑเบšเบ•เบปเบงเป€เบฅเบเปเบฅเบฐเบ•เบปเบงเป€เบฅเบเป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™ (เบฅเบงเบกเบ—เบฑเบ‡เป€เบ„เบทเปˆเบญเบ‡เบ‚เบฝเบ™), เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒ

เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ (<>) {
foreach $word (m/(\w+)/g) {
# เป€เบฎเบฑเบ”เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ”เป‰เบงเบ $word เบ—เบตเปˆเบ™เบตเป‰
}
}

เบงเบดเบ—เบตเบเบฒเบ™ เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰ I เบžเบดเบก เบญเบญเบ a เบ„เบงเบฒเบกเบ–เบตเปˆเบ‚เบญเบ‡เบ„เปเบฒ or เบ„เบงเบฒเบกเบ–เบตเปˆเป€เบชเบฑเป‰เบ™ เบชเบฐเบซเบผเบธเบš?
เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เปเบเบเบญเบญเบเปเบ•เปˆเบฅเบฐเบ„เปเบฒเปƒเบ™เบเบฐเปเบชเบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™. เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ—เปเบฒเบ—เปˆเบฒเบงเปˆเบฒเป‚เบ”เบ
เบ„เปเบฒเบ—เบตเปˆเบ—เปˆเบฒเบ™เบซเบกเบฒเบเป€เบ–เบดเบ‡ chunk เบ‚เบญเบ‡เบ•เบปเบงเบญเบฑเบเบชเบญเบ™, hyphens, เบซเบผเบท apostrophes, เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเบเปˆเบงเบฒเบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™.
whitespace chunk เปเบ™เบงโ€‹เบ„เบงเบฒเบกโ€‹เบ„เบดเบ”โ€‹เบ‚เบญเบ‡โ€‹เบ„เปเบฒโ€‹เบ—เบตเปˆโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เปƒเบ™โ€‹เบ„เปเบฒโ€‹เบ–เบฒเบกโ€‹เบ—เบตเปˆโ€‹เบœเปˆเบฒเบ™โ€‹เบกเบฒโ€‹:

เบ‚เบญเบ‡เบ‚เป‰เบญเบ (% เป€เบซเบฑเบ™);
เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ (<>) {
เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ (/(\b[^\W_\d][\w'-]+\b)/g ) { # เบ„เบดเบ”เบฎเบญเบ” "`เปเบเบฐ"
$seen{$1}++;
}
}

เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ ($word, $count) เบ‚เบญเบ‡เบ‚เป‰เบญเบ = เปเบ•เปˆเบฅเบฐ % เป€เบซเบฑเบ™ ) {
เบžเบดเบก "$count $word\n";
}

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ”เบฝเบงเบเบฑเบ™เบชเปเบฒเบฅเบฑเบšเป€เบชเบฑเป‰เบ™, เบ—เปˆเบฒเบ™เบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ›เบปเบเบเบฐเบ•เบด:

เบ‚เบญเบ‡เบ‚เป‰เบญเบ (% เป€เบซเบฑเบ™);

เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ (<>) {
$seen{$_}++;
}

เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ (เบ‚เบญเบ‡เบ‚เป‰เบญเบ ($line, $count) = เปเบ•เปˆเบฅเบฐ % เป€เบซเบฑเบ™ ) {
เบžเบดเบก "$count $line";
}

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบซเป‰เบœเบปเบ™เบœเบฐเบฅเบดเบ”เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบขเบนเปˆเปƒเบ™เบฅเปเบฒเบ”เบฑเบš, เป€เบšเบดเปˆเบ‡ perlfaq4: "เบ‚เป‰เบญเบเบˆเบฐเบˆเบฑเบ”เบฅเบฝเบ‡ hash เปเบ™เบงเปƒเบ”.
(เบ—เบฒเบ‡เป€เบฅเบทเบญเบเป‚เบ”เบเบกเบนเบ™เบ„เปˆเบฒเปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบฅเบฐเบซเบฑเบ”)?".

เบงเบดเบ—เบตเบเบฒเบ™ เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰ I do เบ›เบฐเบกเบฒเบ™ เบเบปเบ‡เบเบฑเบ™?
เป€เบšเบดเปˆเบ‡เป‚เบกเบ”เบนเบ™ String:: เบ›เบฐเบกเบฒเบ™เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป„เบ”เป‰เบˆเบฒเบ CPAN.

เบงเบดเบ—เบตเบเบฒเบ™ do I เบ›เบฐเบชเบดเบ”เบ—เบดเบœเบปเบ™ เบเบฒเบ™เปเบ‚เปˆเบ‡เบ‚เบฑเบ™ เบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบ เบ›เบปเบเบเบฐเบ•เบด expressions at เบ„เบฑเป‰เบ‡เบ”เบฝเบง?
(เบ›เบฐเบเบญเบšเบชเปˆเบงเบ™เป‚เบ”เบ brian d foy)

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบกเบต Perl 5.10 เบซเบผเบทเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบ™เบตเป‰เปเบกเปˆเบ™เป€เบเบทเบญเบšเบšเปเปˆเบชเปเบฒเบ„เบฑเบ™. เบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆ smart match เบเบฑเบš
array เบ‚เบญเบ‡ object expression เบ›เบปเบเบเบฐเบ•เบด:

my @patterns = ( qr/Fr.d/, qr/B.rn.y/, qr/W.lm./ );

เบ–เป‰เบฒ ( $string ~~ @patterns ) {
...
};

เบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเบ—เบตเปˆเบชเบฐเบซเบผเบฒเบ”เบˆเบฐเบขเบธเบ”เป€เบกเบทเปˆเบญเบกเบฑเบ™เบžเบปเบšเบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆ, เบชเบฐเบ™เบฑเป‰เบ™เบกเบฑเบ™เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบžเบฐเบเบฒเบเบฒเบกเบ—เบธเบเบเบฒเบ™เบชเบฐเปเบ”เบ‡.

เบเปˆเบญเบ™เปœเป‰เบฒเบ™เบตเป‰เบเบงเปˆเบฒ Perl 5.10, เบ—เปˆเบฒเบ™เบกเบตเบงเบฝเบเป€เบฎเบฑเบ”เปœเป‰เบญเบเปœเบถเปˆเบ‡. เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เบฅเบงเบšเบฅเบงเบก a
เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเป€เบ›เบฑเบ™เบ›เบปเบเบเบฐเบ•เบดเบ—เบธเบเบ„เบฑเป‰เบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบˆเบฑเบšเบ„เบนเปˆเบกเบฑเบ™. เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ™เบตเป‰, perl เบ•เป‰เบญเบ‡ recompile
เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ›เบปเบเบเบฐเบ•เบดเบชเปเบฒเบฅเบฑเบšเบ—เบธเบเป† iteration เบ‚เบญเบ‡ "foreach" loop เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบกเบฑเบ™เบšเปเปˆเบกเบตเบ—เบฒเบ‡เบ—เบตเปˆเบˆเบฐ
เบฎเบนเป‰เบงเปˆเบฒ $pattern เบˆเบฐเป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”:

my @patterns = qw(foo bar baz );

LINE: เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ( ) {
foreach $pattern ( @patterns ) {
เบ–เป‰เบฒ( /\b$เปเบšเบš\b/i ) {
เบžเบดเบก;
เปเบ–เบงเบ•เปเปˆเป„เบ›;
}
}
}

เบ•เบปเบงเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™ "qr//" เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เปƒเบ™ perl 5.005. เบกเบฑเบ™เบฅเบงเบšเบฅเบงเบกเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ›เบปเบเบเบฐเบ•เบด, เปเบ•เปˆเบšเปเปˆเปเบกเปˆเบ™
เบ™เบณเปƒเบŠเป‰เบกเบฑเบ™. เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เปƒเบŠเป‰ regex เบชเบฐเบšเบฑเบšเบ—เบตเปˆเบฅเบงเบšเบฅเบงเบกเบเปˆเบญเบ™, perl เป€เบฎเบฑเบ”เบงเบฝเบเบซเบ™เป‰เบญเบเบฅเบปเบ‡. เปƒเบ™โ€‹เบ™เบตเป‰
เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เปƒเบชเปˆ "เปเบœเบ™เบ—เบตเปˆ" เป€เบžเบทเปˆเบญเบซเบฑเบ™เปเบ•เปˆเบฅเบฐเบฎเบนเบšเปเบšเบšเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เปเบšเบšเบŸเบญเบกเบ—เบตเปˆเบฅเบงเบšเบฅเบงเบกเป„เบงเป‰เบเปˆเบญเบ™. เบชเปˆเบงเบ™เบ—เบตเปˆเป€เบซเบผเบทเบญเบ‚เบญเบ‡
script เปเบกเปˆเบ™เบ„เบทเบเบฑเบ™, เปเบ•เปˆเป„เบงเบเบงเปˆเบฒ:

my @patterns = เปเบœเบ™เบ—เบตเปˆ { qr/\b$_\b/i } qw( foo bar baz );

LINE: เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ( <> ) {
foreach $pattern ( @patterns ) {
เบ–เป‰เบฒ( /$pattern/ ) {
เบžเบดเบก;
เปเบ–เบงเบ•เปเปˆเป„เบ›;
}
}
}

เปƒเบ™โ€‹เบšเบฒเบ‡โ€‹เบเปโ€‹เบฅเบฐโ€‹เบ™เบตโ€‹, เบ—เปˆเบฒเบ™โ€‹เบญเบฒเบ”โ€‹เบˆเบฐโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป€เบฎเบฑเบ”โ€‹เปƒเบซเป‰โ€‹เบซเบผเบฒเบโ€‹เบฎเบนเบšโ€‹เปเบšเบšโ€‹เป€เบ‚เบปเป‰เบฒโ€‹เป„เบ›โ€‹เปƒเบ™โ€‹เบเบฒเบ™โ€‹เบชเบฐโ€‹เปเบ”เบ‡โ€‹เบญเบญเบโ€‹เบ›เบปเบโ€‹เบเบฐโ€‹เบ•เบดโ€‹เบ”เบฝเบงโ€‹.
เบฅเบฐเบงเบฑเบ‡เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ—เบตเปˆเบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เบกเบตเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบ„เบทเบ™.

$regex เบ‚เบญเบ‡เบ‚เป‰เบญเบ = เป€เบ‚เบปเป‰เบฒเบฎเปˆเบงเบก '|', qw( foo bar baz );

LINE: เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ( <> ) {
เบžเบดเบกเบ–เป‰เบฒ /\b(?:$regex)\b/i;
}

เบชเปเบฒเบฅเบฑเบšเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบšเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเป€เบ›เบฑเบ™เบ›เบปเบเบเบฐเบ•เบด, เป€เบšเบดเปˆเบ‡ Mastering เป€เบ›เบฑเบ™เบ›เบปเบเบเบฐเบ•เบด เบชเบณ เบ™เบงเบ™ by
Jeffrey Friedl. เบฅเบฒเบงเบญเบฐเบ—เบดเบšเบฒเบเบงเปˆเบฒเป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ›เบปเบเบเบฐเบ•เบดเป€เบฎเบฑเบ”เบงเบฝเบเปเบ™เบงเปƒเบ”เปเบฅเบฐเป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบšเบฒเบ‡เบฎเบนเบšเปเบšเบš
เป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เปเบ›เบเบ—เบตเปˆเบšเปเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš. เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเบดเบ—เบตเบเบฒเบ™ perl เปƒเบŠเป‰เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ›เบปเบเบเบฐเบ•เบด,
เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เบฑเบšเปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบชเปเบฒเบฅเบฑเบšเบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบชเปˆเบงเบ™เบšเบธเบเบ„เบปเบ™.

เป€เบ›เบฑเบ™เบซเบเบฑเบ‡ เบšเปเปˆเป„เบ”เป‰ เบ‚เบญเบšโ€‹เป€เบ‚เบ”โ€‹เบ„เปเบฒโ€‹เบชเบฑเบšโ€‹เบ•เปˆเบฒเบ‡เป†โ€‹ เบเบฒเบ™เบŠเบญเบเบซเบฒ เบเบฑเบš "\b" เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบ เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™ เบ‚เป‰เบญเบเบšเป?
(เบ›เบฐเบเบญเบšเบชเปˆเบงเบ™เป‚เบ”เบ brian d foy)

เปƒเบซเป‰โ€‹เปเบ™เปˆโ€‹เปƒเบˆเบงเปˆโ€‹เบฒโ€‹เบ—เปˆเบฒเบ™โ€‹เบฎเบนเป‰โ€‹เบงเปˆเบฒ \b เป€เบฎเบฑเบ”โ€‹เปเบ™เบงโ€‹เปƒเบ”โ€‹เปเบ—เป‰โ€‹: เบกเบฑเบ™โ€‹เป€เบ›เบฑเบ™โ€‹เป€เบ‚เบ”โ€‹เปเบ”เบ™โ€‹เบฅเบฐโ€‹เบซเบงเปˆเบฒเบ‡โ€‹เบฅเบฑเบโ€‹เบชเบฐโ€‹เบ™เบฐโ€‹เบ„เปเบฒโ€‹เบชเบฑเบšโ€‹เบ•เปˆเบฒเบ‡เป†โ€‹, \wโ€‹,
เปเบฅเบฐเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ„เปเบฒเบชเบฑเบš. เบชเบดเปˆเบ‡เบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ„เปเบฒเบชเบฑเบšเบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™
\W, เปเบ•เปˆเบกเบฑเบ™เบชเบฒเบกเบฒเบ”เป€เบ›เบฑเบ™เบˆเบธเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ เบซเบผเบทเบˆเบธเบ”เบชเบดเป‰เบ™เบชเบธเบ”เบ‚เบญเบ‡เบชเบฐเบ•เบฃเบดเบ‡เป„เบ”เป‰.

เบกเบฑเบ™โ€‹เบšเปเปˆโ€‹เปเบกเปˆเบ™ (เบšเปเปˆ!) เบ‚เบญเบšโ€‹เป€เบ‚เบ”โ€‹เบฅเบฐโ€‹เบซเบงเปˆเบฒเบ‡ whitespace เปเบฅเบฐ non-whitespace, เปเบฅเบฐโ€‹เบกเบฑเบ™โ€‹เบšเปเปˆโ€‹เปเบกเปˆเบ™โ€‹เบชเบดเปˆเบ‡โ€‹เบ‚เบญเบ‡
เบฅเบฐเบซเบงเปˆเบฒเบ‡เบ„เปเบฒเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบ›เบฐเป‚เบซเบเบ.

เปƒเบ™ regex เป€เบงเบปเป‰เบฒ, เบ‚เบญเบšเป€เบ‚เบ”เบ„เปเบฒเบชเบฑเบš (\b) เปเบกเปˆเบ™ "เบเบฒเบ™เบขเบทเบ™เบขเบฑเบ™เบ„เบงเบฒเบกเบเบงเป‰เบฒเบ‡เบชเบนเบ™", เบŠเบถเปˆเบ‡เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบกเบฑเบ™เบšเปเปˆเปเบกเปˆเบ™.
เป€เบ›เบฑเบ™เบ•เบปเบงเปเบ—เบ™เบ‚เบญเบ‡เบ•เบปเบงเบญเบฑเบเบชเบญเบ™เปƒเบ™เบชเบฐเบ•เบฃเบดเบ‡, เปเบ•เปˆเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบขเบนเปˆเปƒเบ™เบ•เปเบฒเปเบซเบ™เปˆเบ‡เบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™.

เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ›เบปเบเบเบฐเบ•เบด, /\bPerl\b/, เบ•เป‰เบญเบ‡เบกเบตเบ‚เบญเบšเป€เบ‚เบ”เบ„เปเบฒเบชเบฑเบšเบเปˆเบญเบ™ "P" เปเบฅเบฐ.
เบซเบผเบฑเบ‡เบˆเบฒเบ "l". เบ•เบฒเบšเปƒเบ”เบ—เบตเปˆเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ™เบญเบเป€เปœเบทเบญเป„เบ›เบˆเบฒเบเบ•เบปเบงเบฅเบฐเบ„เบญเบ™เบ„เบณเบชเบฑเบšเบเปˆเบญเบ™เปœเป‰เบฒ "P" เปเบฅเบฐ
เบชเปเบฒเป€เบฅเบฑเบ” "l", เบฎเบนเบšเปเบšเบšเบˆเบฐเบเบปเบ‡เบเบฑเบ™. เบชเบฐเบ•เบฃเบดเบ‡เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบเบปเบ‡เบเบฑเบš /\bPerl\b/.

"Perl" # เบšเปเปˆเบกเบตเบ„เปเบฒเบชเบฑเบš char เบเปˆเบญเบ™ P เบซเบผเบทเบซเบผเบฑเบ‡เบˆเบฒเบ l
"Perl" # เบ„เบทเบเบฑเบ™เบเบฑเบšเบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ (เบเบฐเบซเบงเปˆเบฒเบ‡เบšเปเปˆเปเบกเปˆเบ™เบ„เปเบฒเบชเบฑเบš char)
"'Perl'" # the 'char เบšเปเปˆเปเบกเปˆเบ™เบ„เบณเบงเปˆเบฒ char
"Perl's" # เบšเปเปˆเบกเบตเบ„เปเบฒเบชเบฑเบš char เบเปˆเบญเบ™ P, เบšเปเปˆเปเบกเปˆเบ™เบ„เปเบฒเบชเบฑเบš char เบซเบผเบฑเบ‡เบˆเบฒเบ "l"

เบชเบฐเบ•เบฃเบดเบ‡เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบšเปเปˆเบเบปเบ‡เบเบฑเบš /\bPerl\b/.

"Perl_" # _ เป€เบ›เบฑเบ™เบ„เปเบฒ char!
"Perler" # เบšเปเปˆเบกเบตเบ„เปเบฒเบชเบฑเบš char เบเปˆเบญเบ™ P, เปเบ•เปˆเบซเบ™เบถเปˆเบ‡เบซเบผเบฑเบ‡เบˆเบฒเบ l

เบ—เปˆเบฒเบ™เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เปƒเบŠเป‰ \b เป€เบžเบทเปˆเบญเบˆเบฑเบšเบ„เบนเปˆเบ„เปเบฒเบชเบฑเบšเบ•เปˆเบฒเบ‡เป†. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™เบ„เปเบฒเบชเบฑเบš
เบญเป‰เบญเบกเบฎเบญเบšเบ”เป‰เบงเบเบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบ„เปเบฒเบชเบฑเบš. เบชเบฐเบ•เบฃเบดเบ‡เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบเบปเบ‡เบเบฑเบšเบฎเบนเบšเปเบšเบš /\b'\b/.

"เบขเปˆเบฒ" # 'char เปเบกเปˆเบ™เบญเป‰เบญเบกเบฎเบญเบšเบ”เป‰เบงเบ "n" เปเบฅเบฐ "t"
"qep'a'" # the 'char เปเบกเปˆเบ™เบญเป‰เบญเบกเบฎเบญเบšเบ”เป‰เบงเบ "p" เปเบฅเบฐ "a"

เบชเบฐเบ•เบฃเบดเบ‡เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบšเปเปˆเบเบปเบ‡เบเบฑเบš /\b'\b/.

"foo'" # เบšเปเปˆเบกเบตเบ„เปเบฒเบชเบฑเบš char เบซเบผเบฑเบ‡เบˆเบฒเบเบšเปเปˆเปเบกเปˆเบ™เบ„เปเบฒเบชเบฑเบš '

เบ—เปˆเบฒเบ™เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เบเบฒเบ™เป€เบชเบตเบกเบ‚เบญเบ‡ \b, \B, เป€เบžเบทเปˆเบญเบฅเบฐเบšเบธเบงเปˆเบฒเบšเปเปˆเบ„เบงเบ™เบกเบตเบ„เปเบฒ
เป€เบ‚เบ”เปเบ”เบ™.

เปƒเบ™เบฎเบนเบšเปเบšเบš /\Bam\B/, เบ•เป‰เบญเบ‡เบกเบตเบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบเปˆเบญเบ™ "a" เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบ "m".
เบฎเบนเบšเปเบšเบšเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบเบปเบ‡เบเบฑเบš /\Bam\B/:

"llama" # "am" เบญเป‰เบญเบกเบฎเบญเบšเบ”เป‰เบงเบเบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบ„เปเบฒเบชเบฑเบš
"เบŠเบฒเบกเบนเป€เบญเบ™" # เบ„เบทเบเบฑเบ™

เบชเบฐเบ•เบฃเบดเบ‡เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบšเปเปˆเบเบปเบ‡เบเบฑเบ™ /\Bam\B/

"เปเบŠเบก" # เบšเปเปˆเบกเบตเบ„เบณเบงเปˆเบฒเป€เบ‚เบ”เปเบ”เบ™เบเปˆเบญเบ™ "เบ", เปเบ•เปˆเบกเบตเบ„เบณเปœเบถเปˆเบ‡เบซเบผเบฑเบ‡ "เบก"
"เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒ Sam" # "am" เบญเป‰เบญเบกเบฎเบญเบšเบ”เป‰เบงเบเบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™เบ„เปเบฒเบชเบฑเบš

เป€เบ›เบฑเบ™เบซเบเบฑเบ‡ เบšเปเปˆ เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ $&, $`, or $' เบŠเป‰เบฒ my เป‚เบ„เบ‡เบเบฒเบ™ เบฅเบปเบ‡?
(เบ›เบฐเบเบญเบšเบชเปˆเบงเบ™เป‚เบ”เบ Anno Siegel)

เป€เบกเบทเปˆเบญ Perl เป€เบซเบฑเบ™เบงเปˆเบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบซเบ™เบถเปˆเบ‡เปƒเบ™เบ•เบปเบงเปเบ›เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบขเบนเปˆเบ—เบธเบเบšเปˆเบญเบ™เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™, เบกเบฑเบ™เบชเบฐเบซเบ™เบญเบ‡
เบžเบงเบเบกเบฑเบ™เบขเบนเปˆเปƒเบ™เปเบ•เปˆเบฅเบฐเบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบเบปเบ‡เบเบฑเบ™. เบ™เบฑเป‰เบ™ เปเบฒเบ เบ„เบงเบฒเบกเบงเปˆเบฒเปƒเบ™เบ—เบธเบเป†เบฎเบนเบšเปเบšเบšเบเบปเบ‡เบเบฑเบ™เบ—เบฑเบ‡ เปเบปเบ”
string เบˆเบฐเบ–เบทเบเบ„เบฑเบ”เบฅเบญเบ, เบชเปˆเบงเบ™เบ‚เบญเบ‡เบกเบฑเบ™เป€เบ›เบฑเบ™ $`, เบชเปˆเบงเบ™เป€เบ›เบฑเบ™ $&, เปเบฅเบฐเบชเปˆเบงเบ™เป€เบ›เบฑเบ™ $'. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบเบฒเบ™เบฅเบปเบ‡เป‚เบ—เบ”เปเบกเปˆเบ™
เบฎเป‰เบฒเบเปเบฎเบ‡เบ—เบตเปˆเบชเบธเบ”เบ”เป‰เบงเบเบชเบฒเบเบเบฒเบง เปเบฅเบฐเบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบเบปเบ‡เบเบฑเบ™เป€เบฅเบทเป‰เบญเบเป†. เบซเบผเบตเบเป€เบงเบฑเป‰เบ™ $&, $', เปเบฅเบฐ $` เบ–เป‰เบฒเบ—เปˆเบฒเบ™
เบชเบฒเบกเบฒเบ”, เปเบ•เปˆเบ–เป‰เบฒเบ—เปˆเบฒเบ™เป€เบฎเบฑเบ”เบšเปเปˆเป„เบ”เป‰, เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เป„เบ”เป‰เปƒเบŠเป‰เบžเบงเบเบกเบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”, เปƒเบซเป‰เปƒเบŠเป‰เบžเบงเบเบกเบฑเบ™เบ•เบฒเบกเบ„เบงเบฒเบกเบ•เบฑเป‰เบ‡เปƒเบˆเป€เบžเบฒเบฐเบงเปˆเบฒเบ—เปˆเบฒเบ™เป„เบ”เป‰
เบˆเปˆเบฒเบเบ„เปˆเบฒเบฅเบฒเบ„เบฒเปเบฅเป‰เบง. เบˆเบทเปˆเป„เบงเป‰เบงเปˆเบฒเบšเบฒเบ‡เบญเบฑเบ™เบเปเบฃเบดเบ—เบถเบกเบฎเบนเป‰เบˆเบฑเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเปเบ—เป‰เป†. เป€เบ›เบฑเบ™เบ‚เบญเบ‡
5.005 เบ›เปˆเบญเบ, $& variable เปเบกเปˆเบ™เบšเปเปˆ "เปเบžเบ‡" เปเบšเบšเบ—เบตเปˆเบชเบญเบ‡เบญเบทเปˆเบ™เป†.

เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆ Perl 5.6.1 เบ•เบปเบงเปเบ›เบžเบดเป€เบชเบ” @- เปเบฅเบฐ @+ เบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เปเบ—เบ™ $`, $& เปเบฅเบฐ $'.
array เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบกเบตเบ•เบปเบงเบŠเบตเป‰เป„เบ›เบซเบฒเบˆเบธเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ เปเบฅเบฐเบˆเบธเบ”เบชเบดเป‰เบ™เบชเบธเบ”เบ‚เบญเบ‡เปเบ•เปˆเบฅเบฐเบเบฒเบ™เปเบ‚เปˆเบ‡เบ‚เบฑเบ™ (เป€เบšเบดเปˆเบ‡ perlvar เบชเปเบฒเบฅเบฑเบš
เป€เบ•เบฑเบกเป€เบฅเบทเปˆเบญเบ‡), เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเปƒเบซเป‰เบ—เปˆเบฒเบ™เป€เบ›เบฑเบ™เบ‚เปเป‰เบกเบนเบ™เบ”เบฝเบงเบเบฑเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™, เปเบ•เปˆเบšเปเปˆเบกเบตเบ„เบงเบฒเบกเบชเปˆเบฝเบ‡เบ‚เบญเบ‡
เบเบฒเบ™เบ„เบฑเบ”เบฅเบญเบเบชเบฐเบ•เบฃเบดเบ‡เบซเบผเบฒเบเป€เบเบตเบ™เป„เบ›.

Perl 5.10 เป€เบžเบตเปˆเบกเบชเบฒเบกเบžเบดเป€เบชเบ”, "${^MATCH}", "${^PREMATCH}", เปเบฅเบฐ "${^POSTMATCH}" เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”
เบงเบฝเบเบ”เบฝเบงเบเบฑเบ™เปเบ•เปˆเบšเปเปˆเบกเบตเบเบฒเบ™เบฅเบปเบ‡เป‚เบ—เบ”เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบปเปˆเบงเป‚เบฅเบ. Perl 5.10 เบžเบฝเบ‡เปเบ•เปˆเบเปเบฒเบ™เบปเบ”เบ•เบปเบงเปเบ›เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰
เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบซเบผเบทเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ›เบปเบเบเบฐเบ•เบดเบ”เป‰เบงเบเบ•เบปเบงเปเบเป‰เป„เบ‚ "/p".

เปเบกเปˆเบ™โ€‹เบซเบเบฑเบ‡ เบ”เบต is "\G" in a เบ›เบปเบเบเบฐเบ•เบด เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบ?
เบ—เปˆเบฒเบ™เปƒเบŠเป‰เบชเบฐเบกเป "\G" เป€เบžเบทเปˆเบญเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เปเบ‚เปˆเบ‡เบ‚เบฑเบ™เบ•เปเปˆเป„เบ›เปƒเบ™เบชเบฐเบ•เบฃเบดเบ‡เบ”เบฝเบงเบเบฑเบ™เบ—เบตเปˆเบเบปเบ‡เบเบฑเบ™เบชเบธเบ”เบ—เป‰เบฒเบ
เบ›เบฐเป„เบงเป‰. เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ›เบปเบเบเบฐเบ•เบดเบšเปเปˆเบชเบฒเบกเบฒเบ”เบ‚เป‰เบฒเบกเบ•เบปเบงเบญเบฑเบเบชเบญเบ™เปƒเบ”เป†เป€เบžเบทเปˆเบญเบŠเบญเบเบซเบฒเบ•เปเปˆเป„เบ›
เบˆเบฑเบšเบ„เบนเปˆเบเบฑเบšเบชเบฐเบกเปเบ™เบตเป‰, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™ "\G" เปเบกเปˆเบ™เบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบšเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡เบชเบฐเบกเป, "^". เป„เบ”เป‰
เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เปเบฅเป‰เบงเบชเบฐเบกเป "\G" เปเบกเปˆเบ™เปƒเบŠเป‰เบเบฑเบšเบ—เบธเบ‡ "g". เบกเบฑเบ™เปƒเบŠเป‰เบ„เปˆเบฒเบ‚เบญเบ‡ "pos()" เป€เบ›เบฑเบ™
เบ•เปเบฒเปเบซเบ™เปˆเบ‡เป€เบžเบทเปˆเบญเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เปเบ‚เปˆเบ‡เบ‚เบฑเบ™เบ•เปเปˆเป„เบ›. เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบœเบนเป‰เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เปเบ‚เปˆเบ‡เบ‚เบฑเบ™เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡, เบกเบฑเบ™
เบ›เบฑเบšเบ›เบธเบ‡ "pos()" เบเบฑเบšเบ•เปเบฒเปเบซเบ™เปˆเบ‡เบ‚เบญเบ‡เบฅเบฑเบเบชเบฐเบ™เบฐเบ•เปเปˆเป„เบ›เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒเบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ (เบซเบผเบทเบ—เปเบฒเบญเบดเบ”
เบฅเบฑเบเบชเบฐเบ™เบฐเบ‚เบญเบ‡เบเบฒเบ™เปเบ‚เปˆเบ‡เบ‚เบฑเบ™เบ•เปเปˆเป„เบ›, เบ‚เบถเป‰เบ™เบเบฑเบšเบงเบดเบ—เบตเบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบกเบฑเบเป€เบšเบดเปˆเบ‡เบกเบฑเบ™). เปเบ•เปˆเบฅเบฐเบชเบฒเบเบกเบตเบ‚เบญเบ‡เบกเบฑเบ™
เบ„เปˆเบฒ "pos()" เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡.

เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเบ•เบปเบงเป€เบฅเบเบ•เบดเบ”เบ•เปเปˆเบเบฑเบ™เบ—เบฑเบ‡เปเบปเบ”เปƒเบ™เบชเบฐเบ•เบฃเบดเบ‡เป€เบŠเบฑเปˆเบ™ "1122a44"
เปเบฅเบฐเบขเบธเบ”เบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เบžเบปเบšเบเบฑเบšเบ•เบปเบงเป€เบฅเบเบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™เบ•เบปเบงเป€เบฅเบ. เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆ 11 เปเบฅเบฐ 22 เปเบ•เปˆ
เบ•เบปเบงเบญเบฑเบเบชเบญเบ™ เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เป€เบ–เบดเบ‡เบฅเบฐเบซเบงเปˆเบฒเบ‡ 22 เปเบฅเบฐ 44 เปเบฅเบฐเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบขเบธเบ”เบขเบนเปˆเบ—เบตเปˆ "a". เบžเบฝเบ‡เปเบ•เปˆเบˆเบฑเบšเบ„เบนเปˆเบ„เบนเปˆ
เบ•เบปเบงเป€เบฅเบเบ‚เป‰เบฒเบก "a" เปเบฅเบฐเบเบฑเบ‡เบเบปเบ‡เบเบฑเบš 44.

$_ = "1122a44";
my @pairs = m/(\d\d)/g; # qw( 11 22 44 )

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เปƒเบŠเป‰เบชเบฐเบกเป "\G", เบ—เปˆเบฒเบ™เบšเบฑเบ‡เบ„เบฑเบšเบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเบซเบผเบฑเบ‡เบˆเบฒเบ 22 เป€เบžเบทเปˆเบญเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบ "a". เป„เบ”เป‰
เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ›เบปเบเบเบฐเบ•เบดเบšเปเปˆเบชเบฒเบกเบฒเบ”เบˆเบฑเบšเบ„เบนเปˆเบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบกเบฑเบ™เบšเปเปˆเบžเบปเบšเบ•เบปเบงเป€เบฅเบ, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเบ•เปเปˆเป„เบ›
เบฅเบปเป‰เบกเป€เบซเบฅเบง เปเบฅเบฐเบœเบนเป‰เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเบˆเบฐเบชเบปเปˆเบ‡เบ„เบทเบ™เบ„เบนเปˆเบ—เบตเปˆเบกเบฑเบ™เบžเบปเบšเปเบฅเป‰เบง.

$_ = "1122a44";
my @pairs = m/\G(\d\d)/g; # qw( 11 22 )

เบ—เปˆเบฒเบ™เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เบชเบฐเบกเป "\G" เปƒเบ™เบšเปเบฅเบดเบšเบปเบ”เบชเบฐเป€เบเบฑเบ”เป€เบ‡เบดเบ™เป„เบ”เป‰. เบ—เปˆเบฒเบ™เบเบฑเบ‡เบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบธเบ‡ "g".

$_ = "1122a44";
เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ( m/\G(\d\d)/g ) {
เบžเบดเบก "เบžเบปเบš $1\n";
}

เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบเบฒเบ™โ€‹เปเบ‚เปˆเบ‡โ€‹เบ‚เบฑเบ™โ€‹เบšเปเปˆโ€‹เบชเปเบฒโ€‹เป€เบฅเบฑเบ”โ€‹เบขเบนเปˆโ€‹เปƒเบ™โ€‹เบ•เบปเบงโ€‹เบญเบฑเบโ€‹เบชเบญเบ™ "aโ€‹"โ€‹, perl reset "pos()โ€‹" เปเบฅเบฐโ€‹เบเบฒเบ™โ€‹เปเบ‚เปˆเบ‡โ€‹เบ‚เบฑเบ™โ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เปƒเบ™โ€‹
เบชเบฒเบเบ”เบฝเบงเบเบฑเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปƒเบ™เบ•เบญเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™.

$_ = "1122a44";
เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ( m/\G(\d\d)/g ) {
เบžเบดเบก "เบžเบปเบš $1\n";
}

เบžเบดเบก "Found $1 after while" เบ–เป‰เบฒ m/(\d\d)/g; # เบžเบปเบš "11"

เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบ›เบดเบ”โ€‹เบเบฒเบ™โ€‹เบ—เปเบฒโ€‹เบ‡เบฒเบ™ "pos()โ€‹" เบ›เบฑเบšโ€‹เปƒเบซเบกเปˆโ€‹เปƒเบ™โ€‹เบเบฒเบ™โ€‹เบฅเบปเป‰เบกโ€‹เป€เบซเบผเบงโ€‹เบ”เป‰เบงเบโ€‹เบ—เบธเบ‡ "cโ€‹"โ€‹, เป€เบญโ€‹เบเบฐโ€‹เบชเบฒเบ™โ€‹เปƒเบ™ perlop เปเบฅเบฐโ€‹
perlreref. เบเบฒเบ™เปเบ‚เปˆเบ‡เบ‚เบฑเบ™เบ•เปเปˆเบกเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบšเปˆเบญเบ™เบ—เบตเปˆเบเบฒเบ™เปเบ‚เปˆเบ‡เบ‚เบฑเบ™เบ—เบตเปˆเบชเปเบฒเป€เบฅเบฑเบ”เบœเบปเบ™เบชเบธเบ”เบ—เป‰เบฒเบเบชเบดเป‰เบ™เบชเบธเบ”เบฅเบปเบ‡ (เบกเบนเบ™เบ„เปˆเบฒเบ‚เบญเบ‡
"pos()") เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเบขเบนเปˆเปƒเบ™เบชเบฐเบ•เบฃเบดเบ‡เบ”เบฝเบงเบเบฑเบ™เบˆเบฐเบฅเบปเป‰เบกเป€เบซเบฅเบงเปƒเบ™เป€เบงเบฅเบฒเบ™เบตเป‰. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบ™เบตเป‰, เป„เบ”เป‰
เบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเบซเบผเบฑเบ‡เบˆเบฒเบเบงเบปเบ‡ "while()" เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ—เบตเปˆ "a" (เบšเปˆเบญเบ™เบ—เบตเปˆเบเบฒเบ™เปเบ‚เปˆเบ‡เบ‚เบฑเบ™เบชเบธเบ”เบ—เป‰เบฒเบเบขเบธเบ”), เปเบฅเบฐเบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆ
เบกเบฑเบ™เบšเปเปˆเป„เบ”เป‰เปƒเบŠเป‰เบชเบฐเบกเปเปƒเบ”เป†เบ—เบตเปˆเบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบ‚เป‰เบฒเบกเบœเปˆเบฒเบ™ "a" เป€เบžเบทเปˆเบญเบŠเบญเบเบซเบฒ 44.

$_ = "1122a44";
เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ(m/\G(\d\d)/gc ) {
เบžเบดเบก "เบžเบปเบš $1\n";
}

เบžเบดเบก "Found $1 after while" เบ–เป‰เบฒ m/(\d\d)/g; # เบžเบปเบš "44"

เป‚เบ”เบเบ›เบปเบเบเบฐเบ•เบดเบ—เปˆเบฒเบ™เปƒเบŠเป‰เบชเบฐเบกเป "\G" เบเบฑเบšเบ—เบธเบ‡ "c" เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบฅเบญเบ‡เบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเบญเบทเปˆเบ™
เบ–เป‰เบฒเบซเบ™เบถเปˆเบ‡เบฅเบปเป‰เบกเป€เบซเบฅเบง, เป€เบŠเบฑเปˆเบ™เปƒเบ™ tokenizer. Jeffrey Friedl เบชเบฐเป€เบซเบ™เบตเบ•เบปเบงเบขเปˆเบฒเบ‡เบ™เบตเป‰เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™
5.004 เบซเบผเบทเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™.

เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ (<>) {
chomp;
เบ•เบปเบงเบงเบดเป€เบ„เบฒเบฐ: {
m/ \G( \d+\b )/gcx && do {เบžเบดเบก "เบ•เบปเบงเป€เบฅเบ: $1\n"; เป€เบฎเบฑเบ”เบ„เบทเบ™; } ;
m/ \G( \w+ )/gcx && do {เบžเบดเบก "เบ„เบณเบชเบฑเบš: $1\n"; เป€เบฎเบฑเบ”เบ„เบทเบ™; } ;
m/ \G(\s+ )/gcx && do {เบžเบดเบก "space: $1\n"; เป€เบฎเบฑเบ”เบ„เบทเบ™; } ;
m/ \G( [^\w\d]+ )/gcx && do {เบžเบดเบก "other: $1\n"; เป€เบฎเบฑเบ”เบ„เบทเบ™; } ;
}
}

เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเปเบ–เบง, "PARSER" loop เบ—เปเบฒเบญเบดเบ”เบžเบฐเบเบฒเบเบฒเบกเบˆเบฑเบšเบ„เบนเปˆเบŠเบธเบ”เบ•เบปเบงเป€เบฅเบเบ•เบฒเบกเบ”เป‰เบงเบ a
เบ‚เบญเบšโ€‹เป€เบ‚เบ”โ€‹เบ„เปเบฒโ€‹เบชเบฑเบšโ€‹เบ•เปˆเบฒเบ‡เป†โ€‹. เบเบฒเบ™โ€‹เปเบ‚เปˆเบ‡โ€‹เบ‚เบฑเบ™โ€‹เบ™เบตเป‰โ€‹เบ•เป‰เบญเบ‡โ€‹เป€เบฅเบตเปˆเบกโ€‹เบ•เบปเป‰เบ™โ€‹เปƒเบ™โ€‹เบชเบฐโ€‹เบ–เบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบเบฒเบ™โ€‹เปเบ‚เปˆเบ‡โ€‹เบ‚เบฑเบ™โ€‹เบชเบธเบ”โ€‹เบ—เป‰เบฒเบโ€‹เบ›เบฐโ€‹เป„เบงเป‰ (เบซเบผเบทโ€‹
เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡เบชเบฐเบ•เบฃเบดเบ‡เปƒเบ™เบเบฒเบ™เปเบ‚เปˆเบ‡เบ‚เบฑเบ™เบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”). เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบ "m/ \G( \d+\b )/gcx" เปƒเบŠเป‰เบ—เบธเบ‡ "c",
เบ–เป‰เบฒเบชเบฐเบ•เบฃเบดเบ‡เบšเปเปˆเบเบปเบ‡เบเบฑเบšเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบœเบปเบ™เบ›เบปเบเบเบฐเบ•เบดเบ™เบฑเป‰เบ™, perl เบˆเบฐเบšเปเปˆเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปƒเปเปˆ pos() เปเบฅเบฐ
เบเบฒเบ™เปเบ‚เปˆเบ‡เบ‚เบฑเบ™เบ•เปเปˆเป„เบ›เบˆเบฐเป€เบฅเบตเปˆเบกเบˆเบฒเบเบ•เบณเปเปœเปˆเบ‡เบ”เบฝเบงเบเบฑเบ™เป€เบžเบทเปˆเบญเบฅเบญเบ‡เปƒเบŠเป‰เบฎเบนเบšเปเบšเบšเบญเบทเปˆเบ™.

เบกเบต Perl regexes DFAs or NFAs? เบกเบต เบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ POSIX เบชเบญเบ”เบ„เปˆเบญเบ‡?
เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบกเบฑเบ™เป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ›เบปเบเบเบฐเบ•เบดเบ‚เบญเบ‡ Perl เบ„เป‰เบฒเบเบ„เบทเบเบฑเบš DFAs (เบเปเบฒเบ™เบปเบ”เบ‚เบญเบšเป€เบ‚เบ”เบˆเปเบฒเบเบฑเบ”
automata) เบ‚เบญเบ‡ เบ•เบปเบงเบขเปˆเบฒเบ‡(1) เป‚เบ„เบ‡เบเบฒเบ™, เบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเปเบกเปˆเบ™เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบ›เบฑเบ™ NFAs (เบšเปเปˆเบเปเบฒเบ™เบปเบ”
automata finite) เป€เบžเบทเปˆเบญเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰ backtracking เปเบฅเบฐ backreferencing. เปเบฅเบฐเบžเบงเบเบกเบฑเบ™เบšเปเปˆเปเบกเปˆเบ™เปเบšเบš POSIX
เบšเปเปˆเบงเปˆเบฒเบˆเบฐเป€เบ›เบฑเบ™, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบเบฒเบ™เบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบเบฒเบ™เบ›เบฐเบžเบถเบ”เบ—เบตเปˆเบฎเป‰เบฒเบเปเบฎเบ‡เบ—เบตเปˆเบชเบธเบ”เบชเปเบฒเบฅเบฑเบšเบ—เบธเบเบเปเบฅเบฐเบ™เบต. (เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบšเบฒเบ‡
เบ›เบฐเบŠเบฒเบŠเบปเบ™เบกเบฑเบเบเบฒเบ™เบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบ„เบงเบฒเบกเบชเบญเบ”เบ„เปˆเบญเบ‡, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบชเบดเปˆเบ‡เบ—เบตเปˆเบฎเบฑเบšเบ›เบฐเบเบฑเบ™เปเบกเปˆเบ™เบ„เบงเบฒเบกเบŠเป‰เบฒ.) เป€เบšเบดเปˆเบ‡
เบ›เบทเป‰เบก "Mastering Regular Expressions" (เบˆเบฒเบ O'Reilly) เป‚เบ”เบ Jeffrey Friedl เบชเปเบฒเบฅเบฑเบšเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”
เป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เบซเบงเบฑเบ‡เบงเปˆเบฒเบˆเบฐเบฎเบนเป‰เบเปˆเบฝเบงเบเบฑเบšเป€เบฅเบทเปˆเบญเบ‡เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰ (เบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบตเบ‡เป€เบ•เบฑเบกเบ—เบตเปˆเบ›เบฒเบเบปเบ”เบขเบนเปˆเปƒเบ™ perlfaq2).

เปเบกเปˆเบ™เบซเบเบฑเบ‡ เบœเบดเบ”เบžเบฒเบ” เบเบฑเบš เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ grep in a void เบชเบฐเบžเบฒเบšเบเบฒเบ™?
เบšเบฑเบ™เบซเบฒเปเบกเปˆเบ™เบงเปˆเบฒ grep เบเปเปˆเบชเป‰เบฒเบ‡เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบเบฑเบšเบ„เบทเบ™, เป‚เบ”เบเบšเปเปˆเบ„เปเบฒเบ™เบถเบ‡เป€เบ–เบดเบ‡เบชเบฐเบžเบฒเบšเบเบฒเบ™. เบ™เบตเป‰โ€‹เบซเบกเบฒเบโ€‹เบ„เบงเบฒเบกโ€‹เบงเปˆเบฒ
เบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰ Perl เป„เบ›เบซเบฒเบšเบฑเบ™เบซเบฒเบ‚เบญเบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ—เบตเปˆเบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบ–เบดเป‰เบกเป„เบ›. เบ–เป‰เบฒ
เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเปเบกเปˆเบ™เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆ, เบ—เปˆเบฒเบ™เป€เบชเบเป€เบงเบฅเบฒเปเบฅเบฐเบžเบทเป‰เบ™เบ—เบตเปˆ. เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบ„เบงเบฒเบกโ€‹เบ•เบฑเป‰เบ‡โ€‹เปƒเบˆโ€‹เบ‚เบญเบ‡โ€‹เบ—เปˆเบฒเบ™โ€‹เปเบกเปˆเบ™โ€‹เป€เบžเบทเปˆเบญ iterate เปƒเบ™โ€‹เป„เบฅโ€‹เบเบฐโ€‹
เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เปƒเบŠเป‰เบชเปเบฒเบฅเบฑเบš loop เบชเปเบฒเบฅเบฑเบšเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เบ™เบตเป‰.

เปƒเบ™ perls เป€เบเบปเปˆเบฒเบเบงเปˆเบฒ 5.8.1, เปเบœเบ™เบ—เบตเปˆเบ—เบปเบ™เบ—เบธเบเบˆเบฒเบเบšเบฑเบ™เบซเบฒเบ™เบตเป‰เป€เบŠเบฑเปˆเบ™เบเบฑเบ™. เปเบ•เปˆเบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆ 5.8.1, เบ™เบตเป‰
เป„เบ”เป‰เบ–เบทเบเปเบเป‰เป„เบ‚เปเบฅเป‰เบง, เปเบฅเบฐเปเบœเบ™เบ—เบตเปˆเปเบกเปˆเบ™เบฎเบฑเบšเบฎเบนเป‰เบชเบฐเบžเบฒเบšเบเบฒเบ™ - เปƒเบ™เบšเปเบฅเบดเบšเบปเบ”เบ—เบตเปˆเป€เบ›เบฑเบ™เป‚เบกเบ„เบฐ, เบšเปเปˆเบกเบตเบฅเบฒเบเบŠเบทเปˆเปƒเบ”เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™.

เบงเบดเบ—เบตเบเบฒเบ™ เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰ I เบเบฒเบ™เปเบ‚เปˆเบ‡เบ‚เบฑเบ™ strings เบเบฑเบš multibyte เบ•เบปเบงเบฅเบฐเบ„เบญเบ™?
เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบˆเบฒเบ Perl 5.6 Perl เป„เบ”เป‰เบกเบตเบšเบฒเบ‡เบฅเบฐเบ”เบฑเบšเบ‚เบญเบ‡เบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบฅเบฑเบเบชเบฐเบ™เบฐ multibyte. Perl 5.8 เบซเบผเบท
เบ•เปเปˆเบกเบฒเปเบกเปˆเบ™เปเบ™เบฐเบ™เปเบฒ. repertoires เบฅเบฑเบเบชเบฐเบ™เบฐ multibyte เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบ›เบฐเบเบญเบšเบกเบต Unicode, เปเบฅเบฐ
เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เปเบšเบšเป€เบเบปเปˆเบฒเบœเปˆเบฒเบ™เป‚เบกเบ”เบนเบ™เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”. เป€เบšเบดเปˆเบ‡ perluniintro, perlunicode, เปเบฅเบฐเป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”.

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เบดเบ”เบขเบนเปˆเบเบฑเบš Perls เป€เบเบปเปˆเบฒ, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ” Unicode เบ”เป‰เบงเบ Unicode:: String module, เปเบฅเบฐ
เบเบฒเบ™เบ›เปˆเบฝเบ™เบ•เบปเบงเบญเบฑเบเบชเบญเบ™เป‚เบ”เบเปƒเบŠเป‰ Unicode::Map8 เปเบฅเบฐ Unicode::Map modules. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เปƒเบŠเป‰
เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบžเบฒเบชเบฒเบเบตเปˆเบ›เบธเปˆเบ™, เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบฅเบญเบ‡เปƒเบŠเป‰ jperl 5.005_03.

เบชเบธเบ”เบ—เป‰เบฒเบ, เบงเบดเบ—เบตเบเบฒเบ™เบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰เป„เบ”เป‰เบ–เบทเบเบชเบฐเป€เบซเบ™เบตเป‚เบ”เบ Jeffrey Friedl, เบšเบปเบ”เบ„เบงเบฒเบกเปƒเบ™
เบชเบฐเบšเบฑเบš #5 เบ‚เบญเบ‡เบงเบฒเบฅเบฐเบชเบฒเบ™ Perl เป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰.

เปƒเบซเป‰เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเป€เบˆเบปเป‰เบฒเบกเบตเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ” Martian เปเบ›เบเป† เบšเปˆเบญเบ™เบ—เบตเปˆเบกเบตเบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบ•เบปเบงเบžเบดเบกเปƒเบซเบเปˆ ASCII เบ„เบนเปˆ.
encode เบ•เบปเบงเบญเบฑเบเบชเบญเบ™ Martian เบ”เบฝเบง (เป€เบŠเบฑเปˆเบ™: เบชเบญเบ‡ bytes "CV" เบชเป‰เบฒเบ‡เบˆเบปเบ”เบซเบกเบฒเบ Martian เบ”เบฝเบง, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบš
เบชเบญเบ‡ bytes "SG", "VS", "XX", เปเบฅเบฐเบญเบทเปˆเบ™เป†). bytes เบญเบทเปˆเบ™เป†เป€เบ›เบฑเบ™เบ•เบปเบงเปเบ—เบ™เบ‚เบญเบ‡เบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบ”เบฝเบง, เบ„เบทเบเบฑเบ™เบเบฑเบš
ASCII.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบŠเปˆเบญเบเปเบ™เปˆเบ‚เบญเบ‡ Martian "เบ‚เป‰เบญเบเปเบกเปˆเบ™ CVSGXX!" เปƒเบŠเป‰ 12 bytes เป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เป€เบเบปเป‰เบฒเบ•เบปเบงเบญเบฑเบเบชเบญเบ™ 'I',
', 'a', 'm', ' ', 'CV', 'SG', 'XX', '!'.

เบ•เบญเบ™เบ™เบตเป‰, เปƒเบซเป‰เป€เบงเบปเป‰เบฒเบงเปˆเบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ„เบปเป‰เบ™เบซเบฒเบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบ”เบฝเบง "/GX/". Perl เบšเปเปˆเบฎเบนเป‰เบเปˆเบฝเบงเบเบฑเบš
Martian, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบกเบฑเบ™เบˆเบฐเบžเบปเบšเป€เบซเบฑเบ™เบชเบญเบ‡ bytes "GX" เปƒเบ™ "เบ‚เป‰เบญเบเปเบกเปˆเบ™ CVSGXX!" string, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒ
เบฅเบฑเบเบชเบฐเบ™เบฐเบšเปเปˆเป„เบ”เป‰เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™: เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™เบเป‰เบญเบ™เบงเปˆเบฒ "SG" เบขเบนเปˆเปƒเบเป‰เบเบฑเบš "XX", เปเบ•เปˆเบงเปˆเบฒเบกเบต
เบšเปเปˆเบกเบต "GX". เบ™เบตเป‰เปเบกเปˆเบ™เบšเบฑเบ™เบซเบฒเปƒเบซเบเปˆ.

เบ™เบตเป‰เปเบกเปˆเบ™เบšเบฒเบ‡เบงเบดเบ—เบต, เป€เบˆเบฑเบšเบ›เบงเบ”เบ—เบฑเบ‡เปเบปเบ”, เป€เบžเบทเปˆเบญเบฎเบฑเบšเบกเบทเบเบฑเบšเบกเบฑเบ™:

# เปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒ "martian" bytes เบ—เบตเปˆเบขเบนเปˆเปƒเบเป‰เบ„เบฝเบ‡เปเบกเปˆเบ™เบšเปเปˆเบขเบนเปˆเบ•เบดเบ”เบเบฑเบ™.
$martian =~ s/([AZ][AZ])/ $1 /g;

เบžเบดเบก "เบžเบปเบš GX!\n" เบ–เป‰เบฒ $martian =~ /GX/;

เบซเบผเบทเปเบšเบšเบ™เบตเป‰:

@chars เบ‚เบญเบ‡เบ‚เป‰เบญเบ = $martian =~ m/([AZ][AZ]|[^AZ])/g;
# เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบ™เบตเป‰เปเบกเปˆเบ™เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบš: my @chars = $text =~ m/(.)/g;
#
foreach my $char (@chars) {
เบžเบดเบก "เบžเบปเบš GX!\n", เบชเบธเบ”เบ—เป‰เบฒเบเบ–เป‰เบฒ $char eq 'GX';
}

เบซเบผเบทเปเบšเบšเบ™เบตเป‰:

เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ ($martian =~ m/\G([AZ][AZ]|.)/gs) {# \G เบญเบฒเบ”เบˆเบฐเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™
เบ–เป‰เบฒ ($1 eq 'GX') {
เบžเบดเบก "เบžเบปเบš GX!\n";
เบชเบธเบ”เบ—เป‰เบฒเบ;
}
}

เบ™เบตเป‰เปเบกเปˆเบ™เบงเบดเบ—เบตเบญเบทเปˆเบ™, เป€เบˆเบฑเบšเบ›เบงเบ”เบซเบ™เป‰เบญเบเบฅเบปเบ‡, เบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เบˆเบฒเบ Benjamin Goldberg, เบœเบนเป‰เบ—เบตเปˆเปƒเบŠเป‰ a
เบขเบทเบ™เบขเบฑเบ™เบเบฒเบ™เป€เบšเบดเปˆเบ‡เบ—เบฒเบ‡เบฅเบปเบšเบ”เป‰เบฒเบ™เบฅเบปเบšเบ„เบงเบฒเบกเบเบงเป‰เบฒเบ‡เบชเบนเบ™.

เบžเบดเบก "เบžเบปเบš GX!\n" เบ–เป‰เบฒ $martian =~ m/
(?
(?:[AZ][AZ])*?
GX
/x;

เบญเบฑเบ™เบ™เบตเป‰เบชเบณเป€เบฅเบฑเบ”เบ–เป‰เบฒเบ•เบปเบงเบฅเบฐเบ„เบญเบ™ "martian" GX เบขเบนเปˆเปƒเบ™เบชเบฐเบ•เบฃเบดเบ‡, เปเบฅเบฐเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™. เบ–เป‰เบฒโ€‹เป€เบˆเบปเป‰เบฒ
เบšเปเปˆเบกเบฑเบเปƒเบŠเป‰ (?
(?

เบกเบฑเบ™เบกเบตเบ‚เปเป‰เบšเบปเบเบœเปˆเบญเบ‡เปƒเบ™เบเบฒเบ™เบงเบฒเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเบœเบดเบ”เบžเบฒเบ”เปƒเบ™ $-[0] เปเบฅเบฐ $+[0], เปเบ•เปˆเบ™เบตเป‰เบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบง
เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบงเบฝเบเป„เบ”เป‰เบ›เบฐเบกเบฒเบ™.

เบงเบดเบ—เบตเบเบฒเบ™ do I เบเบฒเบ™เปเบ‚เปˆเบ‡เบ‚เบฑเบ™ a เบ›เบปเบเบเบฐเบ•เบด เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบ เบ™เบฑเป‰เบ™เปเบกเปˆเบ™ in a เบ•เบปเบงเปเบ›?
(เบ›เบฐเบเบญเบšเบชเปˆเบงเบ™เป‚เบ”เบ brian d foy)

เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบšเปเปˆโ€‹เบˆเปเบฒโ€‹เป€เบ›เบฑเบ™โ€‹เบ•เป‰เบญเบ‡โ€‹เป„เบ”เป‰ hard-code เบฎเบนเบšโ€‹เปเบšเบšโ€‹เป€เบ‚เบปเป‰เบฒโ€‹เป„เบ›โ€‹เปƒเบ™โ€‹เบ•เบปเบงโ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบเบฒเบ™โ€‹เบˆเบฑเบšโ€‹เบ„เบนเปˆ (เบซเบผเบทโ€‹เบชเบดเปˆเบ‡โ€‹เบญเบทเปˆเบ™เป†โ€‹เบ—เบตเปˆโ€‹เป€เบฎเบฑเบ”โ€‹เบงเบฝเบโ€‹
เบ”เป‰เบงเบเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเป€เบ›เบฑเบ™เบ›เบปเบเบเบฐเบ•เบด). เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เปƒเบชเปˆเบฎเบนเบšเปเบšเบšเปƒเบ™เบ•เบปเบงเปเบ›เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ•เปเปˆเบกเบฒ.

เบ•เบปเบงเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเปเบกเปˆเบ™เบšเปเบฅเบดเบšเบปเบ”เบญเป‰เบฒเบ‡เบญเบตเบ‡เบ„เบนเปˆ, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ” interpolate เบ•เบปเบงเปเบ›เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป„เบ”เป‰เบžเบฝเบ‡เปเบ•เปˆ
เบ„เบทเบเบฑเบšเบชเบฐเบ•เบฃเบดเบ‡เบ—เบตเปˆเบญเป‰เบฒเบ‡เบญเบตเบ‡เบชเบญเบ‡เป€เบ—เบปเปˆเบฒ. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เบ—เปˆเบฒเบ™เบญเปˆเบฒเบ™เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ›เบปเบเบเบฐเบ•เบดเป€เบ›เบฑเบ™เบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰
เปเบฅเบฐเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™ $regex. เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เบกเบตเบฎเบนเบšเปเบšเบšเปƒเบ™ $regex, เบ—เปˆเบฒเบ™เปƒเบŠเป‰เบ•เบปเบงเปเบ›เบ™เบฑเป‰เบ™เปƒเบ™
เบˆเบฑเบšเบ„เบนเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™.

chomp( $regex เบ‚เบญเบ‡เบ‚เป‰เบญเบ = );

เบ–เป‰เบฒ ($string =~ m/$regex/ ) { ... }

เบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบžเบดเป€เบชเบ”เบ—เบตเปˆเบชเบฐเปเบ”เบ‡เบญเบญเบเป€เบ›เบฑเบ™เบ›เบปเบเบเบฐเบ•เบดเปƒเบ™ $regex เปเบกเปˆเบ™เบเบฑเบ‡เบžเบดเป€เบชเบ”, เปเบฅเบฐเบฎเบนเบšเปเบšเบš
เบเบฑเบ‡เบ•เป‰เบญเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡เบซเบผเบท Perl เบˆเบฐเบˆเบปเปˆเบก. เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡, เปƒเบ™เบฎเบนเบšเปเบšเบšเบ™เบตเป‰เบกเบต
เบงเบปเบ‡เป€เบฅเบฑเบšเบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบˆเบฑเบšเบ„เบนเปˆ.

$regex เบ‚เบญเบ‡เบ‚เป‰เบญเบ = "เบšเปเปˆเบเบปเบ‡เบเบฑเบ™ (paren";

"เบชเบญเบ‡ paren เบ—เบตเปˆเบˆเบฐเบœเบนเบเบกเบฑเบ”เบžเบงเบเป€เบ‚เบปเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”" =~ m/$regex/;

เป€เบกเบทเปˆเบญ Perl เบฅเบงเบšเบฅเบงเบกเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ›เบปเบเบเบฐเบ•เบด, เบกเบฑเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เปเปˆเบงเบปเบ‡เป€เบฅเบฑเบšเป€เบ›เบฑเบ™เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡ a
เบ„เบงเบฒเบกเบˆเบณเบเบปเบ‡เบเบฑเบ™. เป€เบกเบทเปˆเบญเบกเบฑเบ™เบšเปเปˆเบžเบปเบšเบงเบปเบ‡เป€เบฅเบฑเบšเบ›เบดเบ”, เบกเบฑเบ™เบˆเบปเปˆเบกเบงเปˆเบฒ:

เบšเปเปˆเบเบปเบ‡เบเบฑเบ™ (เปƒเบ™ regex; เปเบฒเบเป‚เบ”เบ <-- เบ—เบตเปˆเบ™เบตเป‰ เปƒเบ™ m/Unmatched ( <-- เบ—เบตเปˆเบ™เบตเป‰ paren/ เบขเบนเปˆเปเบ–เบงเบชเบฐเบ„เบฃเบดเบš 3.

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเบ›เบฐเบกเบฒเบ™เบ™เบตเป‰เปƒเบ™เบซเบผเบฒเบเบงเบดเบ—เบตเบ‚เบถเป‰เบ™เบขเบนเปˆเบเบฑเบšเบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ. เบ—เปเบฒเบญเบดเบ”, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบšเปเปˆเป€เบฎเบฑเบ”
เบ•เป‰เบญเบ‡เบเบฒเบ™เบ•เบปเบงเบฅเบฐเบ„เบญเบ™เปƒเบ”เบ™เบถเปˆเบ‡เปƒเบ™เบชเบฐเบ•เบฃเบดเบ‡เป€เบ›เบฑเบ™เบžเบดเป€เบชเบ”, เป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เบซเบฅเบปเบšเปœเบตเบžเบงเบเบกเบฑเบ™เบ”เป‰เบงเบ
"quotemeta" เบเปˆเบญเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบˆเบฐเปƒเบŠเป‰เบชเบฐเบ•เบฃเบดเบ‡.

chomp( $regex เบ‚เบญเบ‡เบ‚เป‰เบญเบ = );
$regex = quotemeta($regex );

เบ–เป‰เบฒ ($string =~ m/$regex/ ) { ... }

เบ—เปˆเบฒเบ™เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰เป‚เบ”เบเบเบปเบ‡เปƒเบ™เบ•เบปเบงเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเป‚เบ”เบเปƒเบŠเป‰เบฅเปเบฒเบ”เบฑเบš "\Q" เปเบฅเบฐ "\E". เป„เบ”เป‰
"\Q" เบšเบญเบ Perl เบšเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเป€เบฅเบตเปˆเบกเบเบฒเบ™เบซเบฅเบปเบšเบซเบ™เบตเบ•เบปเบงเบญเบฑเบเบ‚เบฐเบฅเบฐเบžเบดเป€เบชเบ”, เปเบฅเบฐ "\E" เบšเบญเบเบกเบฑเบ™เบงเปˆเบฒเบˆเบฐเป„เบ›เปƒเบช.
เบขเบธเบ” (เป€เบšเบดเปˆเบ‡ perlop เบชเปเบฒเบฅเบฑเบšเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบก).

chomp( $regex เบ‚เบญเบ‡เบ‚เป‰เบญเบ = );

เบ–เป‰เบฒ($string =~ m/\Q$regex\E/ ) { ... }

เปƒเบ™เบ—เบฒเบ‡เบเบปเบ‡เบเบฑเบ™เบ‚เป‰เบฒเบก, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰ "qr//", เบ•เบปเบงเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™ quote เบ›เบปเบเบเบฐเบ•เบด (เป€เบšเบดเปˆเบ‡ perlop เบชเปเบฒเบฅเบฑเบš
เบฅเบฒเบโ€‹เบฅเบฐโ€‹เบญเบฝเบ”โ€‹เป€เบžเบตเปˆเบกโ€‹เป€เบ•เบตเบก). เบกเบฑเบ™เบญเป‰เบฒเบ‡เบญเบตเบ‡เปเบฅเบฐเบšเบฒเบ‡เบ—เบตเบญเบฒเบ”เบฅเบงเบšเบฅเบงเบกเบฎเบนเบšเปเบšเบš, เปเบฅเบฐเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เบชเบฐเบซเบกเบฑเบเป„เบ”เป‰เป€เบ›เบฑเบ™เบ›เบปเบเบเบฐเบ•เบด
เบ—เบธเบ‡เบชเบฐเปเบ”เบ‡เบญเบญเบเบเบฑเบšเบฎเบนเบšเปเบšเบš.

chomp(เบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™ $ เบ‚เบญเบ‡เบ‚เป‰เบญเบ = );

$regex เบ‚เบญเบ‡เบ‚เป‰เบญเบ = qr/$input/is;

$string =~ m/$regex/ # เบ„เบทเบเบฑเบ™เบเบฑเบš m/$input/is;

เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบชเปˆเบเบฑเบšเบ”เบฑเบเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เปƒเบ”เป†เป‚เบ”เบเบเบฒเบ™เบซเปเปˆ "eval" block เบ›เบฐเบกเบฒเบ™เบชเบดเปˆเบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”.

chomp(เบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™ $ เบ‚เบญเบ‡เบ‚เป‰เบญเบ = );

เบ›เบฐเป€เบกเบตเบ™ {
เบ–เป‰เบฒ($string =~ m/\Q$input\E/ ) { ... }
};
เป€เบ•เบทเบญเบ™ $@ เบ–เป‰เบฒ $@;

เบซเบฅเบท ...

$regex เบ‚เบญเบ‡เบ‚เป‰เบญเบ = eval { qr/$input/is };
เบ–เป‰เบฒ (เบเปเบฒเบ™เบปเบ” $regex ) {
$string =~ m/$regex/;
}
เบญเบทเปˆเบ™ {
เป€เบ•เบทเบญเบ™ $@;
}

เบœเบนเป‰เบ‚เบฝเบ™ เปเบฅเบฐ COPYRIGHT


เบฅเบดเบ‚เบฐเบชเบดเบ” (c) 1997-2010 Tom Christiansen, Nathan Torkington, เปเบฅเบฐเบœเบนเป‰เบ‚เบฝเบ™เบญเบทเปˆเบ™เป†เบ•เบฒเบกเบ—เบตเปˆเบšเบฑเบ™เบ—เบถเบเป„เบงเป‰.
เบชเบดเบ”เบ—เบดเบ—เบฑเบ‡เบซเบกเบปเบ”เบชเบฐเบซเบ‡เบงเบ™.

เป€เบญเบเบฐเบชเบฒเบ™เบ™เบตเป‰เปเบกเปˆเบ™เบšเปเปˆเป€เบชเบเบ„เปˆเบฒ; เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เปเบˆเบเบขเบฒเบเบกเบฑเบ™เบ„เบทเบ™เปƒเบซเบกเปˆเปเบฅเบฐ / เบซเบผเบทเบ”เบฑเบ”เปเบ›เบ‡เบกเบฑเบ™เบžเบฒเบเปƒเบ•เป‰เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบ”เบฝเบงเบเบฑเบ™
เป€เบ›เบฑเบ™ Perl เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡.

เป‚เบ”เบเบšเปเปˆเบ„เปเบฒเบ™เบถเบ‡เป€เบ–เบดเบ‡เบเบฒเบ™เปเบˆเบเบขเบฒเบเบ‚เบญเบ‡เบกเบฑเบ™, เบ•เบปเบงเบขเปˆเบฒเบ‡เบฅเบฐเบซเบฑเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เป„เบŸเบฅเปŒเบ™เบตเป‰เปเบกเปˆเบ™เบ–เบทเบเบˆเบฑเบ”เปƒเบชเปˆเปƒเบ™เบ™เบตเป‰
เป‚เบ”เป€เบกเบ™เบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐ. เบ—เปˆเบฒเบ™เป„เบ”เป‰เบฎเบฑเบšเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เปเบฅเบฐเบŠเบธเบเบเบนเป‰เปƒเบซเป‰เปƒเบŠเป‰เบฅเบฐเบซเบฑเบ”เบ™เบตเป‰เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบญเบ‡
เป€เบžเบทเปˆเบญเบ„เบงเบฒเบกเบกเปˆเบงเบ™เบŠเบทเปˆเบ™ เบซเบผเบทเป€เบžเบทเปˆเบญเบœเบปเบ™เบเบณเป„เบฅเบ•เบฒเบกเบ—เบตเปˆเป€เบˆเบปเป‰เบฒเป€เบซเบฑเบ™. เบ„เปเบฒเป€เบซเบฑเบ™เบ‡เปˆเบฒเบเป†เปƒเบ™เบฅเบฐเบซเบฑเบ”เปƒเบซเป‰เบชเบดเบ™เป€เบŠเบทเปˆเบญเบˆเบฐเป€เบ›เบฑเบ™
เบกเบฒเบฅเบฐเบเบฒเบ”เปเบ•เปˆเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡.

เปƒเบŠเป‰ perlfaq6 เบญเบญเบ™เป„เบฅเบ™เปŒเป‚เบ”เบเปƒเบŠเป‰เบšเปเบฅเบดเบเบฒเบ™ onworks.net


เป€เบŠเบตเบšเป€เบงเบต เปเบฅเบฐเบชเบฐเบ–เบฒเบ™เบตเป€เบฎเบฑเบ”เบงเบฝเบเบŸเบฃเบต

เบ”เบฒเบงเป‚เบซเบผเบ”เปเบญเบฑเบš Windows เปเบฅเบฐ Linux

  • 1
    เบ›เบฅเบฑเบเบญเบดเบ™ Eclipse Checkstyle
    เบ›เบฅเบฑเบเบญเบดเบ™ Eclipse Checkstyle
    เบ›เบฅเบฑเบเบญเบดเบ™ Eclipse Checkstyle
    เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบฅเบฐเบซเบฑเบ” Checkstyle Java
    เบœเบนเป‰เบเบงเบ”เบชเบญเบšเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ Eclipse IDE. เป„เบ”เป‰
    plug-in เปƒเบซเป‰เบ„เปเบฒเบ„เบถเบ”เบ„เปเบฒเป€เบซเบฑเบ™เปƒเบ™เป€เบงเบฅเบฒเบˆเบดเบ‡เบเบฑเบš
    เบœเบนเป‰เปƒเบŠเป‰เบเปˆเบฝเบงเบเบฑเบš viol ...
    เบ”เบฒเบงเป‚เบซเบฅเบ”เบ›เบฅเบฑเบเบญเบดเบ™ Eclipse Checkstyle
  • 2
    AstrOrzPlayer
    AstrOrzPlayer
    AstrOrz Player เป€เบ›เบฑเบ™เบœเบนเป‰เบ™เบชเบทเปˆเบกเบงเบ™เบŠเบปเบ™เบŸเบฃเบต
    เบŠเบญเบšโ€‹เปเบงโ€‹, เบชเปˆเบงเบ™โ€‹เบซเบ™เบถเปˆเบ‡โ€‹เบญเบตเบ‡โ€‹เปƒเบชเปˆ WMP เปเบฅเบฐ VLCโ€‹. เป„เบ”เป‰
    เบœเบนเป‰เบ™เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบฎเบนเบšเปเบšเบš minimalist, เบกเบต
    เบซเบผเบฒเบโ€‹เบโ€‹เปˆโ€‹เบงเบฒโ€‹เบชเบดเบšโ€‹เบชเบตโ€‹เบซเบปเบงโ€‹เบ‚เปเป‰โ€‹, เปเบฅเบฐโ€‹เบเบฑเบ‡โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹
    b
    เบ”เบฒเบงเป‚เบซเบฅเบ” AstrOrzPlayer
  • 3
    movistartv
    movistartv
    Kodi Movistar+ TV es un ADDON para XBMC/
    Kodi que permite disponer de un
    decodificador de los servicios IPTV de
    Movistar integrado en uno de los
    เบชเบนเบ™โ€‹เบเบฒเบ‡โ€‹เบชเบทเปˆโ€‹เบกเบงเบ™โ€‹เบŠเบปเบ™โ€‹เบกเบฒ ...
    เบ”เบฒเบงเป‚เบซเบฅเบ” movistartv
  • 4
    เบฅเบฐเบซเบฑเบ” :: เบ—เปˆเบญเบ™เป„เบกเป‰
    เบฅเบฐเบซเบฑเบ” :: เบ—เปˆเบญเบ™เป„เบกเป‰
    เบฅเบฐเบซเบฑเบ”::Blocks เป€เบ›เบฑเบ™เปเบซเบผเปˆเบ‡เป€เบ›เบตเบ”เบŸเบฃเบต,
    เบ‚เป‰เบฒเบกเป€เบงเบ—เบต C, C++ เปเบฅเบฐ Fortran IDE
    เบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เป€เบžเบทเปˆเบญเบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบซเบผเบฒเบเบ—เบตเปˆเบชเบธเบ”
    เบ‚เบญเบ‡โ€‹เบœเบนเป‰โ€‹เบŠเบปเบกโ€‹เปƒเบŠเป‰โ€‹เบ‚เบญเบ‡โ€‹เบ•เบปเบ™โ€‹. เบกเบฑเบ™เป„เบ”เป‰เบ–เบทเบเบญเบญเบเปเบšเบšเปƒเบซเป‰เบซเบผเบฒเบ
    เบ‚เบฐเบซเบเบฒเบ...
    เบ”เบฒเบงเป‚เบซเบฅเบ”เบฅเบฐเบซเบฑเบ”::Blocks
  • 5
    เบ—เปˆเบฒเบกเบเบฒเบ‡
    เบ—เปˆเบฒเบกเบเบฒเบ‡
    เบ—เปˆเบฒเบกเบเบฒเบ‡ เบซเบผเบท Advanced Minecraft Interface
    เปเบฅเบฐโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™ / เบเบฒเบ™โ€‹เบ•เบดเบ”โ€‹เบ•เบฒเบกโ€‹เป‚เบ„เบ‡โ€‹เบชเป‰เบฒเบ‡โ€‹เป€เบ›เบฑเบ™โ€‹เป€เบ„เบทเปˆเบญเบ‡โ€‹เบกเบทโ€‹เป€เบžเบทเปˆเบญโ€‹
    เบชเบฐเปเบ”เบ‡เบžเบฒเบšเบฅเบงเบกเบ‚เบญเบ‡ Minecraft
    เป‚เบฅเบ, เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบชเป‰เบฒเบ‡เบกเบฑเบ™เบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡. เบกเบฑเบ™
    เบชเบฒโ€‹เบกเบฒเบ” ...
    เบ”เบฒเบงโ€‹เบ™โ€‹เปŒโ€‹เป‚เบซเบฅเบ”โ€‹เปƒเบ™โ€‹เบ—เปˆเบฒเบกโ€‹เบเบฒเบ‡โ€‹
  • 6
    MSYS2
    MSYS2
    MSYS2 เป€เบ›เบฑเบ™โ€‹เบเบฒเบ™โ€‹เป€เบเบฑเบšโ€‹เบเปเบฒโ€‹เบ‚เบญเบ‡โ€‹เป€เบ„เบทเปˆเบญเบ‡โ€‹เบกเบทโ€‹เปเบฅเบฐโ€‹
    เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบชเบฐเบซเบ™เบญเบ‡เบ—เปˆเบฒเบ™เบ”เป‰เบงเบ
    เบชเบฐโ€‹เบžเบฒเบšโ€‹เปเบงเบ”โ€‹เบฅเป‰เบญเบกโ€‹เบ—เบตเปˆโ€‹เบ‡เปˆเบฒเบโ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบเปเปˆโ€‹เบชเป‰เบฒเบ‡โ€‹,
    เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เปเบฅเบฐเปเบฅเปˆเบ™ Windows เบžเบทเป‰เบ™เป€เบกเบทเบญเบ‡
    เบŠเบญเบšโ€‹เปเบงโ€‹. เบกเบฑเบ™ con...
    เบ”เบฒเบงเป‚เบซเบฅเบ” MSYS2
  • เป€เบžเบตเปˆเบกเป€เบ•เบตเบก ยป

Linux เบ„เบณ เบชเบฑเปˆเบ‡

  • 1
    abootimg
    abootimg
    abootimg - เบˆเบฑเบ”เบเบฒเบ™ Android Boot
    เบฎเบนเบšเบžเบฒเบš. เบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบ: เป€เบ„เบทเปˆเบญเบ‡เบกเบทเป€เบžเบทเปˆเบญ
    เบญเปˆเบฒเบ™/เบ‚เบฝเบ™/เบญเบฑเบšเป€เบ”เบ”เบฎเบนเบšเบžเบฒเบš boot Android ...
    เปเบฅเปˆเบ™ abootimg
  • 2
    abr2gbr
    abr2gbr
    abr2gbr - เปเบ›เบ‡ PhotoShop เปเบฅเบฐเบชเบต
    เบŠเบทเป‰เปเบ›เบ‡ Pro เบเบฑเบš GIMP ...
    เปเบฅเปˆเบ™ abr2gbr
  • 3
    copymat
    copymat
    copymat - เบ›เปˆเบฝเบ™ ASCII matrices เป€เบ›เบฑเบ™ a
    เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบญเปˆเบฒเบ™เป„เบง ...
    เปเบฅเปˆเบ™ copymat
  • 4
    เบชเบฐเบซเบ‡เบงเบ™เบฅเบดเบ‚เบฐเบชเบดเบ” - เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡
    เบชเบฐเบซเบ‡เบงเบ™เบฅเบดเบ‚เบฐเบชเบดเบ” - เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡
    copyright-update - เบญเบฑเบšเป€เบ”เบ”เบฅเบดเบ‚เบฐเบชเบดเบ”
    เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เปƒเบ™โ€‹เป„เบŸเบฅโ€‹เปŒ ...
    เป€เบ›เบตเบ”เบเบฒเบ™เบญเบฑเบšเป€เบ”เบ”เบฅเบดเบ‚เบฐเบชเบดเบ”
  • 5
    g.guigrass
    g.guigrass
    g.gui - เป€เบ›เบตเบ”เบ•เบปเบงเบœเบนเป‰เปƒเบŠเป‰เบเบฒเบŸเบดเบ GRASS
    interface (GUI) session. เบ—เบฒเบ‡เป€เบฅเบทเบญเบ
    เบญเบฑเบšเป€เบ”เบ”เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบชเปˆเบงเบ™เบ•เบดเบ”เบ•เปเปˆเบœเบนเป‰เปƒเบŠเป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™.
    KEYWORDS: เบ—เบปเปˆเบงเป„เบ›, GUI, เบชเปˆเบงเบ™เบ•เบดเบ”เบ•เปเปˆเบœเบนเป‰เปƒเบŠเป‰ ...
    เปเบฅเปˆเบ™ g.guigrass
  • 6
    g.gui.animationgrass
    g.gui.animationgrass
    g.gui.animation - เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เป„เบซเบง a
    เบŠเบธเบ”เบ‚เบญเบ‡เปเบœเบ™เบ—เบตเปˆ raster เปเบฅเบฐ vector เบซเบผเบท a
    space raster เบซเบผเบทเบŠเบธเบ”เบ‚เปเป‰เบกเบนเบ™ vector.
    เบ„เปเบฒเบชเปเบฒเบ„เบฑเบ™: เบ—เบปเปˆเบงเป„เบ›, GUI, เบˆเปเบชเบฐเปเบ”เบ‡เบœเบปเบ™,
    เบžเบฒเบšเป€เบ„เบทเปˆเบญเบ™เป„เบซเบง...
    เปเบฅเปˆเบ™ g.gui.animationgrass
  • เป€เบžเบตเปˆเบกเป€เบ•เบตเบก ยป

Ad