ພາສາອັງກິດພາສາຝຣັ່ງແອສປາໂຍນ

OnWorks favicon

perlrecharclass - ອອນລາຍໃນຄລາວ

ແລ່ນ perlrecharclass ໃນ OnWorks ຜູ້ໃຫ້ບໍລິການໂຮດຕິ້ງຟຣີຜ່ານ Ubuntu Online, Fedora Online, Windows online emulator ຫຼື MAC OS online emulator

ນີ້ແມ່ນຄໍາສັ່ງ perlrecharclass ທີ່ສາມາດດໍາເນີນການໄດ້ໃນ OnWorks ຜູ້ໃຫ້ບໍລິການໂຮດຕິ້ງຟຣີໂດຍໃຊ້ຫນຶ່ງໃນຫຼາຍໆບ່ອນເຮັດວຽກອອນໄລນ໌ຂອງພວກເຮົາເຊັ່ນ Ubuntu Online, Fedora Online, Windows online emulator ຫຼື MAC OS online emulator

ໂຄງການ:

NAME


perlrecharclass - ຫ້ອງຮຽນຕົວອັກສອນປົກກະຕິ Perl

ລາຍລະອຽດ


ເອກະສານລະດັບສູງສຸດກ່ຽວກັບການສະແດງອອກປົກກະຕິ Perl ແມ່ນພົບເຫັນຢູ່ໃນ perlre.

ຫນ້າຄູ່ມືນີ້ສົນທະນາກ່ຽວກັບ syntax ແລະການນໍາໃຊ້ຫ້ອງຮຽນຕົວອັກສອນໃນ Perl ປົກກະຕິ
ສຳ ນວນ.

ຫ້ອງຮຽນຕົວອັກສອນແມ່ນວິທີການສະແດງເຖິງຊຸດຂອງຕົວອັກສອນໃນແບບນັ້ນ
ລັກສະນະຂອງຊຸດແມ່ນກົງກັນ. ມັນເປັນສິ່ງສໍາຄັນທີ່ຈະຈື່ຈໍາວ່າ: ການຈັບຄູ່ລັກສະນະ
class ໃຊ້ແທ້ໜຶ່ງຕົວອັກສອນໃນສະຕຣິງຕົ້ນສະບັບ. (ສະຕຣິງແຫຼ່ງແມ່ນ
string ການສະແດງອອກປົກກະຕິແມ່ນກົງກັບ.)

ມີສາມປະເພດຂອງຫ້ອງຮຽນຕົວອັກສອນໃນການສະແດງປົກກະຕິ Perl: ຈຸດ, backslash
ລຳດັບ, ແລະຮູບແບບທີ່ຕິດຢູ່ໃນວົງເລັບສີ່ຫຼ່ຽມ. ຮັກສາຢູ່ໃນໃຈ, ເຖິງແມ່ນວ່າ, ທີ່ມັກຈະ
ຄໍາວ່າ "ຫ້ອງຮຽນລັກສະນະ" ແມ່ນໃຊ້ເພື່ອຫມາຍຄວາມວ່າພຽງແຕ່ຮູບແບບວົງເລັບ. ແນ່ນອນ, Perl ຫຼາຍທີ່ສຸດ
ເອກະສານເຮັດແນວນັ້ນ.

ໄດ້ ຈຸດ
ຈຸດ (ຫຼືໄລຍະເວລາ), "." ອາດຈະເປັນການນໍາໃຊ້ຫຼາຍທີ່ສຸດ, ແລະແນ່ນອນວ່າເປັນທີ່ຮູ້ຈັກຫຼາຍທີ່ສຸດ
ຫ້ອງຮຽນລັກສະນະ. ໂດຍຄ່າເລີ່ມຕົ້ນ, ຈຸດຈະກົງກັບຕົວອັກສອນໃດນຶ່ງ, ຍົກເວັ້ນແຖວໃໝ່. ນັ້ນ
ສາມາດປ່ຽນຄ່າເລີ່ມຕົ້ນເພື່ອເພີ່ມການຈັບຄູ່ແຖວໃໝ່ໄດ້ໂດຍການໃຊ້ ດຽວ ອອນໄລນ໌ ຕົວແກ້ໄຂ:
ບໍ່ວ່າຈະສໍາລັບການສະແດງອອກປົກກະຕິທັງຫມົດທີ່ມີຕົວແກ້ໄຂ "/s", ຫຼືຢູ່ໃນທ້ອງຖິ່ນທີ່ມີ "(?s)".
(ລໍາດັບ "\N" backslash, ອະທິບາຍຂ້າງລຸ່ມນີ້, ກົງກັບຕົວອັກສອນໃດໆ ຍົກເວັ້ນແຖວໃໝ່
ໂດຍບໍ່ຄໍານຶງເຖິງ ດຽວ ອອນໄລນ໌ ດັດ​ແກ້.)

ທີ່ນີ້ຕົວຢ່າງບາງອັນແມ່ນ:

"a" =~ /./ # ກົງກັນ
"." =~ /./ # ກົງກັນ
"" =~ /./ # ບໍ່ກົງກັນ (ຈຸດຕ້ອງກົງກັບຕົວອັກສອນ)
"\n" =~ /./ # ບໍ່ກົງກັນ (ຈຸດບໍ່ກົງກັບແຖວໃໝ່)
"\n" =~ /./s # ການຈັບຄູ່ (ຕົວແກ້ໄຂ 'ແຖວດຽວ' ທົ່ວໂລກ)
"\n" =~ /(?s:.)/ # ການຈັບຄູ່ (ຕົວແກ້ໄຂ 'ເສັ້ນດຽວ' ທ້ອງຖິ່ນ)
"ab" =~ /^.$/ # ບໍ່ກົງກັນ (ຈຸດກົງກັບຕົວອັກສອນດຽວ)

backslash ລໍາດັບ
ລໍາດັບ backslash ແມ່ນລໍາດັບຂອງຕົວອັກສອນ, ອັນທໍາອິດແມ່ນ backslash.
Perl ອະທິບາຍຄວາມຫມາຍພິເສດຕໍ່ຫຼາຍໆລໍາດັບດັ່ງກ່າວ, ແລະບາງອັນນີ້ແມ່ນລັກສະນະ
ຫ້ອງຮຽນ. ນັ້ນແມ່ນ, ພວກມັນກົງກັບຕົວອັກສອນດຽວແຕ່ລະຄົນ, ສະຫນອງໃຫ້ວ່າຕົວລະຄອນເປັນ
ກັບຊຸດຕົວອັກສອນສະເພາະທີ່ກໍານົດໂດຍລໍາດັບ.

ນີ້ແມ່ນບັນຊີລາຍຊື່ຂອງລໍາດັບ backslash ທີ່ເປັນຫ້ອງຮຽນຕົວອັກສອນ. ພວກເຂົາເຈົ້າໄດ້ຖືກປຶກສາຫາລື
ໃນລາຍລະອຽດເພີ່ມເຕີມຂ້າງລຸ່ມນີ້. (ສໍາລັບລໍາດັບ backslash ທີ່ບໍ່ແມ່ນຫ້ອງຮຽນຕົວອັກສອນ, ເບິ່ງ
perlrebackslash.)

\d ຈັບຄູ່ຕົວອັກສອນຕົວເລກທົດສະນິຍົມ.
\D ຈັບຄູ່ຕົວອັກສອນທີ່ບໍ່ແມ່ນຕົວເລກທົດສະນິຍົມ.
\w ຈັບຄູ່ຕົວອັກສອນ "ຄໍາ".
\W ຈັບຄູ່ຕົວອັກສອນທີ່ບໍ່ແມ່ນ "ຄຳ".
\s ຈັບຄູ່ຕົວອັກສອນຊ່ອງຫວ່າງ.
\S ຈັບຄູ່ຕົວອັກສອນທີ່ບໍ່ແມ່ນຊ່ອງຫວ່າງ.
\h ຈັບຄູ່ລັກສະນະຍະຫວ່າງທາງນອນ.
\H ຈັບຄູ່ຕົວອັກສອນທີ່ບໍ່ແມ່ນຊ່ອງຫວ່າງລວງນອນ.
\v ຈັບຄູ່ຕົວອັກສອນຊ່ອງຫວ່າງໃນແນວຕັ້ງ.
\V ຈັບຄູ່ຕົວອັກສອນທີ່ບໍ່ແມ່ນຊ່ອງຫວ່າງໃນແນວຕັ້ງ.
\N ຈັບຄູ່ຕົວອັກສອນທີ່ບໍ່ແມ່ນແຖວໃໝ່.
\pP, \p{Prop} ກົງກັບຕົວອັກສອນທີ່ມີຄຸນສົມບັດ Unicode ທີ່ໃຫ້.
\PP, \P{Prop} ກົງກັບຕົວອັກສອນທີ່ບໍ່ມີຄຸນສົມບັດຂອງ Unicode

\N

"\N", ມີໃຫ້ເລີ່ມຕົ້ນໃນ v5.12, ເຊັ່ນຈຸດ, ກົງກັບຕົວອັກສອນໃດໆກໍຕາມທີ່ບໍ່ແມ່ນ a
ແຖວໃໝ່. ຄວາມແຕກຕ່າງແມ່ນວ່າ "\N" ບໍ່ໄດ້ຮັບອິດທິພົນຈາກ ດຽວ ອອນໄລນ໌ ປົກກະຕິ
ຕົວແກ້ໄຂການສະແດງອອກ (ເບິ່ງ "ຈຸດ" ຂ້າງເທິງ). ກະລຸນາຮັບຊາບວ່າແບບຟອມ "\N{...}" ອາດຈະໝາຍເຖິງ
ບາງສິ່ງບາງຢ່າງທີ່ແຕກຕ່າງກັນຫມົດ. ເມື່ອ "{...}" ເປັນຕົວກໍານົດປະລິມານ, ມັນຫມາຍເຖິງການຈັບຄູ່ a
ຕົວອັກສອນທີ່ບໍ່ແມ່ນແຖວໃໝ່ຫຼາຍເທື່ອ. ຕົວຢ່າງ, "\N{3}" ຫມາຍເຖິງການຈັບຄູ່ 3 ທີ່ບໍ່ແມ່ນ.
ສາຍໃໝ່; "\N{5,}" ຫມາຍເຖິງການຈັບຄູ່ 5 ຫຼືຫຼາຍກວ່ານັ້ນທີ່ບໍ່ແມ່ນແຖວໃໝ່. ແຕ່ຖ້າ "{...}" ບໍ່ແມ່ນກົດໝາຍ
quantifier, ມັນແມ່ນສົມມຸດວ່າເປັນລັກສະນະທີ່ມີຊື່. ເບິ່ງ charnames ສໍາລັບຜູ້ທີ່. ສໍາລັບ
ຕົວຢ່າງ, ບໍ່ມີ "\N{COLON}", "\N{4F}", ແລະ "\N{F4}" ມີຕົວກໍານົດປະລິມານຕາມກົດໝາຍ, ດັ່ງນັ້ນ Perl
ຈະພະຍາຍາມຊອກຫາຕົວອັກສອນທີ່ມີຊື່ຕາມລໍາດັບ "COLON", "4F", ແລະ "F4".

ຕົວເລກ

"\ d" ກົງກັບຕົວອັກສອນດຽວທີ່ຖືວ່າເປັນຕົວເລກທົດສະນິຍົມ ຫລັກ. ຖ້າ "/a" ປົກກະຕິ
ຕົວແກ້ໄຂການສະແດງອອກແມ່ນມີຜົນ, ມັນກົງກັບ [0-9]. ຖ້າບໍ່ດັ່ງນັ້ນ, ມັນກົງກັບສິ່ງໃດກໍ່ຕາມ
ຖືກຈັບຄູ່ໂດຍ "\p{Digit}", ເຊິ່ງລວມມີ [0-9]. (ຂໍ້​ຍົກ​ເວັ້ນ​ທີ່​ບໍ່​ເປັນ​ໄປ​ໄດ້​ແມ່ນ​ວ່າ​
ພາຍໃຕ້ກົດລະບຽບການຈັບຄູ່ທ້ອງຖິ່ນ, ສະຖານທີ່ປັດຈຸບັນອາດຈະບໍ່ມີ "[0-9]" ຖືກຈັບຄູ່ໂດຍ "\d",
ແລະ/ຫຼື ອາດຈະກົງກັບຕົວອັກສອນອື່ນໆທີ່ມີຈຸດລະຫັດໜ້ອຍກວ່າ 256. ໂຕດຽວເທົ່ານັ້ນ
ຄໍານິຍາມທ້ອງຖິ່ນທີ່ຖືກຕ້ອງຕາມກົດໝາຍຈະກົງກັບ "[0-9]" ບວກກັບຊຸດ 10 ອື່ນ
ຕົວ​ເລກ​ຕິດ​ຕໍ່​ກັນ​; ສິ່ງອື່ນໃດທີ່ຈະລະເມີດພາສາ C
ມາດຕະຖານ, ແຕ່ Perl ບໍ່ໄດ້ສົມມຸດຫຍັງກ່ຽວກັບເລື່ອງນີ້.)

ນີ້ຫມາຍຄວາມວ່າແນວໃດເວັ້ນເສຍແຕ່ວ່າຕົວແກ້ໄຂ "/a" ມີຜົນກະທົບ "\ d" ບໍ່ພຽງແຕ່ກົງກັບ
ຕົວເລກ '0' - '9', ແຕ່ຍັງເປັນພາສາອາຣັບ, ເທວະນາການ, ແລະຕົວເລກຈາກພາສາອື່ນ. ນີ້ອາດຈະ
ເຮັດໃຫ້ເກີດຄວາມສັບສົນ, ແລະບາງບັນຫາຄວາມປອດໄພ.

ບາງຕົວເລກທີ່ກົງກັນ "\d" ເບິ່ງຄືວ່າບາງຕົວເລກ [0-9], ແຕ່ມີຄ່າແຕກຕ່າງກັນ.
ຕົວຢ່າງ, BENGALI DIGIT FOUR (U+09EA) ເບິ່ງຫຼາຍຄືກັບ ASCII DIGIT EIGHT.
(U+0038). ແອັບພລິເຄຊັນທີ່ຄາດຫວັງພຽງແຕ່ຕົວເລກ ASCII ອາດຈະຖືກຫຼອກລວງ, ຫຼືຖ້າ
ການຈັບຄູ່ແມ່ນ "\d+", ສະຕຣິງທີ່ກົງກັນອາດມີສ່ວນປະສົມຂອງຕົວເລກຕ່າງໆ
ລະບົບການຂຽນທີ່ເບິ່ງຄືວ່າພວກເຂົາຫມາຍເຖິງຕົວເລກທີ່ແຕກຕ່າງຈາກພວກເຂົາຕົວຈິງ.
"ຕົວເລກ()" ໃນ Unicode::UCD ສາມາດຖືກໃຊ້ເພື່ອຄິດໄລ່ຄ່າຢ່າງປອດໄພ, ສົ່ງຄືນ "undef" if
ສະຕຣິງການປ້ອນຂໍ້ມູນປະກອບດ້ວຍສ່ວນປະສົມດັ່ງກ່າວ.

"\p{Digit}" ຫມາຍຄວາມວ່າແນວໃດ (ແລະເພາະສະນັ້ນ "\d" ຍົກເວັ້ນພາຍໃຕ້ຕົວແກ້ໄຂ "/a") ແມ່ນ
"\p{General_Category=Decimal_Number}", ຫຼືໃນຄໍາສັບຄ້າຍຄື, "\p{General_Category=Digit}".
ເລີ່ມຕົ້ນດ້ວຍ Unicode ລຸ້ນ 4.1, ນີ້ແມ່ນຊຸດຕົວອັກສອນດຽວກັນທີ່ຈັບຄູ່ໂດຍ
"\p{Numeric_Type=Decimal}". ແຕ່ Unicode ຍັງມີຄຸນສົມບັດທີ່ແຕກຕ່າງກັນກັບຄ້າຍຄືກັນ
ຊື່, "\p{Numeric_Type=Digit}", ເຊິ່ງກົງກັບຊຸດຕົວອັກສອນທີ່ແຕກຕ່າງກັນຢ່າງສິ້ນເຊີງ.
ຕົວອັກສອນເຫຼົ່ານີ້ແມ່ນສິ່ງຕ່າງໆເຊັ່ນ "ຕົວເລກ CIRCLED ONE" ຫຼືຕົວຫຍໍ້, ຫຼືມາຈາກການຂຽນ
ລະບົບທີ່ຂາດຕົວເລກທັງໝົດສິບໂຕ.

ຈຸດປະສົງການອອກແບບແມ່ນເພື່ອໃຫ້ "\ d" ກົງກັບຊຸດຕົວອັກສອນທີ່ສາມາດເປັນໄດ້ຢ່າງປອດໄພ
ໃຊ້ກັບ syntax ເລກຖານທົດສະນິຍົມໃຫຍ່ "ປົກກະຕິ", ເຊິ່ງ, ຕົວຢ່າງ 123 ຫມາຍຄວາມວ່າຫນຶ່ງ.
'ຮ້ອຍ', ບວກສອງ 'ສິບ', ບວກສາມ 'ຫນຶ່ງ'. notation ຕໍາແຫນ່ງນີ້ບໍ່ໄດ້
ຈໍາເປັນຕ້ອງໃຊ້ກັບຕົວອັກສອນທີ່ກົງກັບປະເພດອື່ນໆຂອງ "ຕົວເລກ",
"\p{Numeric_Type=Digit}", ແລະດັ່ງນັ້ນ "\d" ບໍ່ກົງກັບພວກມັນ.

ຕົວເລກທະມິນ (U+0BE6 - U+0BEF) ຍັງສາມາດຖືກນຳໃຊ້ຢ່າງຖືກຕ້ອງຕາມກົດໝາຍໃນຕົວເລກທະມິນແບບເກົ່າໃນ
ເຊິ່ງພວກມັນຈະປາກົດບໍ່ເກີນໜຶ່ງແຖວ, ແຍກອອກຕາມຕົວອັກສອນທີ່ໝາຍເຖິງ
"ເທື່ອ 10", "ຄັ້ງ 100", ແລະອື່ນໆ. (ເບິ່ງhttp://www.unicode.org/notes/tn21>.)

ຕົວອັກສອນໃດນຶ່ງທີ່ບໍ່ກົງກັບ "\d" ແມ່ນກົງກັບ "\D".

Word ລັກສະນະ

A "\w" ກົງກັບຕົວອັກສອນຕົວໜັງສືອັນດຽວ (ຕົວໜັງສື ຫຼື ຕົວເລກທົດສະນິຍົມ
ຕົວເລກ); ຫຼືເຄື່ອງໝາຍວັກຕອນທີ່ເຊື່ອມຕໍ່ກັນ ເຊັ່ນ: ຂີດກ້ອງ ("_"); ຫຼື "ເຄື່ອງຫມາຍ"
ລັກສະນະ (ຄືກັບການອອກສຽງບາງອັນ) ທີ່ຕິດກັບໜຶ່ງໃນນັ້ນ. ມັນບໍ່ກົງກັບ a
ຄຳສັບທັງໝົດ. ເພື່ອໃຫ້ກົງກັບຄຳສັບທັງໝົດ, ໃຫ້ໃຊ້ "\w+". ນີ້ບໍ່ແມ່ນສິ່ງດຽວກັນກັບການຈັບຄູ່
ຄໍາສັບພາສາອັງກິດ, ແຕ່ໃນລະດັບ ASCII ມັນຄືກັນກັບສາຍຂອງ Perl-identifier
ລັກສະນະ.

ຖ້າຕົວແກ້ໄຂ "/a" ມີຜົນ ...
"\w" ກົງກັບ 63 ຕົວອັກສອນ [a-zA-Z0-9_].

ຖ້າບໍ່ດັ່ງນັ້ນ ...
ສໍາລັບຈຸດລະຫັດຂ້າງເທິງ 255 ...
"\w" ກົງກັບ "\p{Word}" ກົງກັນໃນຊ່ວງນີ້. ນັ້ນແມ່ນ, ມັນກົງກັນ
ຕົວອັກສອນໄທ, ຕົວອັກສອນກເຣັກ, ແລະອື່ນໆ. ນີ້ປະກອບມີເຄື່ອງໝາຍວັກຕອນຕົວເຊື່ອມຕໍ່ (ເຊັ່ນ
underscore) ເຊິ່ງເຊື່ອມຕໍ່ສອງຄໍາເຂົ້າກັນ, ຫຼື diacritics, ເຊັ່ນ: "ການລວມເຂົ້າກັນ
TILDE" ແລະຕົວອັກສອນຕົວແກ້ໄຂ, ເຊິ່ງໂດຍທົ່ວໄປແລ້ວແມ່ນໃຊ້ເພື່ອເພີ່ມຕົວຊ່ວຍ
ເຄື່ອງ​ຫມາຍ​ຕົວ​ອັກ​ສອນ​.

ສໍາລັບຈຸດລະຫັດຂ້າງລຸ່ມນີ້ 256 ...
ຖ້າກົດລະບຽບທ້ອງຖິ່ນມີຜົນບັງຄັບໃຊ້ ...
"\w" ກົງກັບຕົວອັກສອນພື້ນຫຼັງຂອງເວທີບວກກັບອັນໃດກໍໄດ້
ທ້ອງຖິ່ນຖືວ່າເປັນຕົວເລກທີ່ເປັນຕົວເລກ.

ຖ້າກົດລະບຽບຂອງ Unicode ມີຜົນບັງຄັບໃຊ້ ...
"\w" ກົງກັບສິ່ງທີ່ "\p{Word}" ກົງກັນ.

ຖ້າບໍ່ດັ່ງນັ້ນ ...
"\w" ກົງກັບ [a-zA-Z0-9_].

ກົດລະບຽບໃດທີ່ນໍາໃຊ້ແມ່ນຖືກກໍານົດຕາມທີ່ອະທິບາຍໄວ້ໃນ "ຕົວແກ້ໄຂຊຸດຕົວອັກສອນໃດຢູ່ໃນ
ຜົນກະທົບ?” ໃນ perlre.

ມີບັນຫາດ້ານຄວາມປອດໄພຫຼາຍອັນກັບລາຍການ Unicode ເຕັມຂອງຕົວອັກສອນ. ເບິ່ງ
<http://unicode.org/reports/tr36>.

ນອກຈາກນັ້ນ, ສໍາລັບຊຸດຕົວອັກສອນທີ່ລະອຽດກວ່າຢູ່ໃນພາສາການຂຽນໂປຼແກຼມ
ຕົວລະບຸເກີນຂອບເຂດ ASCII, ທ່ານອາດຈະຕ້ອງການໃຊ້ຕົວກໍານົດເອງຫຼາຍຂຶ້ນແທນ
"ຄຸນສົມບັດ Unicode", "\p{ID_Start}", "\p{ID_Continue}", "\p{XID_Start}", ແລະ
"\p{XID_Continue}". ເບິ່ງhttp://unicode.org/reports/tr31>.

ຕົວອັກສອນໃດນຶ່ງທີ່ບໍ່ກົງກັບ "\w" ແມ່ນກົງກັບ "\W".

Whitespace

"\s" ກົງກັບຕົວອັກສອນອັນດຽວທີ່ຖືວ່າເປັນຊ່ອງຫວ່າງ.

ຖ້າຕົວແກ້ໄຂ "/a" ມີຜົນ ...
ໃນທຸກລຸ້ນ Perl, "\s" ກົງກັບ 5 ຕົວອັກສອນ [\t\n\f\r]; ນັ້ນແມ່ນ, ໄດ້
ແຖບແນວນອນ, ແຖວໃໝ່, ຟີດແບບຟອມ, ການສົ່ງກັບຄືນລົດ, ແລະພື້ນທີ່.
ເລີ່ມຕົ້ນໃນ Perl v5.18, ມັນຍັງກົງກັບແຖບແນວຕັ້ງ, "\cK". ເບິ່ງບັນທຶກ "[1]" ຂ້າງລຸ່ມນີ້
ສໍາລັບການສົນທະນາກ່ຽວກັບເລື່ອງນີ້.

ຖ້າບໍ່ດັ່ງນັ້ນ ...
ສໍາລັບຈຸດລະຫັດຂ້າງເທິງ 255 ...
"\s" ກົງກັບຈຸດລະຫັດຂ້າງເທິງ 255 ທີ່ສະແດງດ້ວຍຖັນ "s" ໃນ
ຕາຕະລາງຂ້າງລຸ່ມນີ້.

ສໍາລັບຈຸດລະຫັດຂ້າງລຸ່ມນີ້ 256 ...
ຖ້າກົດລະບຽບທ້ອງຖິ່ນມີຜົນບັງຄັບໃຊ້ ...
"\s" ກົງກັບອັນໃດກໍໄດ້ທີ່ສະຖານທີ່ຖືວ່າເປັນບ່ອນຫວ່າງ.

ຖ້າກົດລະບຽບຂອງ Unicode ມີຜົນບັງຄັບໃຊ້ ...
"\s" ກົງກັບຕົວອັກສອນທີ່ສະແດງດ້ວຍຖັນ "s" ໃນຕາຕະລາງ
ຂ້າງລຸ່ມນີ້.

ຖ້າບໍ່ດັ່ງນັ້ນ ...
"\s" ກົງກັບ [\t\n\f\r] ແລະ, ເລີ່ມຕົ້ນໃນ Perl v5.18, ແຖບແນວຕັ້ງ, "\cK".
(ເບິ່ງບັນທຶກ "[1]" ຂ້າງລຸ່ມນີ້ສໍາລັບການສົນທະນາກ່ຽວກັບເລື່ອງນີ້.) ໃຫ້ສັງເກດວ່າບັນຊີລາຍຊື່ນີ້ບໍ່ໄດ້
ລວມເອົາພື້ນທີ່ບໍ່ແຕກ.

ກົດລະບຽບໃດທີ່ນໍາໃຊ້ແມ່ນຖືກກໍານົດຕາມທີ່ອະທິບາຍໄວ້ໃນ "ຕົວແກ້ໄຂຊຸດຕົວອັກສອນໃດຢູ່ໃນ
ຜົນກະທົບ?” ໃນ perlre.

ຕົວອັກສອນໃດນຶ່ງທີ່ບໍ່ກົງກັບ "\s" ແມ່ນກົງກັບ "\S".

"\h" ກົງກັບຕົວອັກສອນໃດນຶ່ງທີ່ຖືວ່າເປັນຊ່ອງຫວ່າງທາງນອນ; ນີ້ປະກອບມີຂອງເວທີ
ຍະຫວ່າງ ແລະຕົວອັກສອນແຖບ ແລະອີກຫຼາຍໆອັນທີ່ລະບຸໄວ້ໃນຕາຕະລາງຂ້າງລຸ່ມນີ້. "\H" ກົງກັບອັນໃດກໍໄດ້
ຕົວອັກສອນບໍ່ໄດ້ຖືກພິຈາລະນາເປັນຊ່ອງຫວ່າງທາງນອນ. ພວກເຂົາໃຊ້ລັກສະນະພື້ນເມືອງຂອງເວທີ
ຕັ້ງຄ່າ, ແລະບໍ່ໄດ້ພິຈາລະນາສະຖານທີ່ໃດນຶ່ງທີ່ອາດຈະຖືກນຳໃຊ້.

"\v" ກົງກັບຕົວອັກສອນໃດນຶ່ງທີ່ຖືວ່າເປັນຊ່ອງຫວ່າງໃນແນວຕັ້ງ; ນີ້ປະກອບມີຂອງເວທີ
carriage return ແລະ line feed character (newline) ບວກກັບຕົວລະຄອນອື່ນໆຫຼາຍອັນ, ທັງໝົດ
ລະບຸໄວ້ໃນຕາຕະລາງຂ້າງລຸ່ມນີ້. "\V" ກົງກັບຕົວອັກສອນໃດນຶ່ງທີ່ບໍ່ຖືວ່າເປັນຊ່ອງຫວ່າງໃນແນວຕັ້ງ.
ພວກເຂົາໃຊ້ຊຸດລັກສະນະພື້ນເມືອງຂອງເວທີ, ແລະບໍ່ໄດ້ພິຈາລະນາທ້ອງຖິ່ນໃດໆທີ່ອາດຈະ
ຖ້າບໍ່ດັ່ງນັ້ນຈະຖືກໃຊ້.

"\R" ກົງກັບອັນໃດນຶ່ງທີ່ສາມາດພິຈາລະນາເປັນແຖວໃໝ່ພາຍໃຕ້ກົດລະບຽບຂອງ Unicode. ມັນສາມາດກົງກັບ ກ
ລຳດັບຫຼາຍຕົວອັກສອນ. ມັນບໍ່ສາມາດຖືກໃຊ້ພາຍໃນຫ້ອງຮຽນຕົວອັກສອນທີ່ມີວົງເລັບ; ໃຊ້ "\v"
ແທນ (ຊ່ອງຫວ່າງໃນແນວຕັ້ງ). ມັນໃຊ້ຊຸດລັກສະນະພື້ນເມືອງຂອງເວທີ, ແລະບໍ່ໄດ້
ພິຈາລະນາສະຖານທີ່ໃດນຶ່ງທີ່ອາດຈະຖືກນຳໃຊ້. ລາຍລະອຽດແມ່ນປຶກສາຫາລືໃນ
perlrebackslash.

ຈື່ໄວ້ວ່າບໍ່ຄືກັບ "\s" (ແລະ "\d" ແລະ "\w"), "\h" ແລະ "\v" ກົງກັບຕົວອັກສອນດຽວກັນສະເໝີ,
ໂດຍບໍ່ຄໍານຶງເຖິງປັດໃຈອື່ນໆ, ເຊັ່ນ: locale ທີ່ໃຊ້ວຽກຫຼືວ່າ string ແຫຼ່ງແມ່ນ
ໃນຮູບແບບ UTF-8.

ຄົນເຮົາອາດຄິດວ່າ "\s" ເທົ່າກັບ "[\h\v]". ນີ້ແມ່ນຄວາມຈິງແທ້ໆເລີ່ມຕົ້ນໃນ Perl
v5.18, ແຕ່ກ່ອນໜ້ານັ້ນ, ຄວາມແຕກຕ່າງພຽງແຕ່ວ່າແຖບແນວຕັ້ງ ("\cK") ບໍ່ແມ່ນ.
ຈັບຄູ່ໂດຍ "\s".

ຕາຕະລາງຕໍ່ໄປນີ້ແມ່ນລາຍຊື່ຕົວອັກສອນທີ່ກົງກັບ "\s", "\h" ແລະ "\v" ເປັນ
ຂອງ Unicode 6.3.

ຖັນທໍາອິດໃຫ້ຈຸດລະຫັດ Unicode ຂອງຕົວອັກສອນ (ໃນຮູບແບບ hex), ທີສອງ
ຖັນໃຫ້ຊື່ (Unicode). ຖັນທີ XNUMX ຊີ້ບອກວ່າຊັ້ນໃດ
ຕົວອັກສອນຖືກຈັບຄູ່ (ສົມມຸດວ່າບໍ່ມີທ້ອງຖິ່ນໃດມີຜົນກະທົບທີ່ມີການປ່ຽນແປງການຈັບຄູ່ "\s").

0x0009 ຕາຕະລາງຕົວອັກສອນ hs
0x000a LINE FEED (LF) ທຽບກັບ
ຕາຕະລາງ 0x000b ທຽບກັບ [1]
0x000c FORM FEED (FF) ທຽບກັບ
0x000d CARRIAGE RETURN (CR) vs
0x0020 SPACE hs
0x0085 ແຖວຕໍ່ໄປ (NEL) ທຽບກັບ [2]
0x00a0 NO-BREAK SPACE hs [2]
0x1680 OGHAM SPACE MARK hs
0x2000 EN QUAD hs
0x2001 EM QUAD hs
0x2002 EN SPACE hs
0x2003 EM SPACE hs
0x2004 XNUMX-per-EM SPACE hs
0x2005 FOUR-PER-EM SPACE hs
0x2006 SIX-PER-EM SPACE hs
0x2007 Figure SPACE hs
0x2008 PUNCTUATION SPACE hs
0x2009 THIN SPACE hs
0x200a HAIR SPACE hs
0x2028 LINE SEPARATOR ທຽບກັບ
0x2029 PARAGRAPH SEPARATOR ທຽບກັບ
0x202f ພື້ນທີ່ບໍ່ແຕກແຄບ hs
0x205f Medium Mathematical Space hs
0x3000 IDEOGRAPHIC SPACE hs

[1] ກ່ອນ Perl v5.18, "\s" ບໍ່ກົງກັບແຖບຕັ້ງ. "[^\S\cK]" (ບໍ່ແນ່ນອນ)
ກົງກັບສິ່ງທີ່ "\s" ເຮັດຕາມປະເພນີ.

[2] ແຖວຕໍ່ໄປ ແລະ NO-BREAK SPACE ອາດຈະ ຫຼືອາດຈະບໍ່ກົງກັບ "\s" ຂຶ້ນກັບກົດລະບຽບໃນ
ຜົນກະທົບ. ເບິ່ງຈຸດເລີ່ມຕົ້ນຂອງພາກນີ້.

Unicode ອະສັງຫາ

"\pP" ແລະ "\p{Prop}" ແມ່ນຫ້ອງຮຽນຕົວອັກສອນເພື່ອໃຫ້ກົງກັບຕົວອັກສອນທີ່ເໝາະສົມກັບ Unicode
ຄຸນສົມບັດ. ຊື່ຄຸນສົມບັດຕົວອັກສອນຕົວໜຶ່ງສາມາດໃຊ້ໃນຮູບແບບ "\pP", ດ້ວຍຄຸນສົມບັດ
ຊື່ຕາມ "\p", ຖ້າບໍ່ດັ່ງນັ້ນ, ຈໍາເປັນຕ້ອງມີວົງເລັບ. ເມື່ອໃຊ້ວົງເລັບ, ມີ a
ຮູບ​ແບບ​ດຽວ​, ຊຶ່ງ​ເປັນ​ພຽງ​ແຕ່​ຊື່​ຊັບ​ສິນ​ທີ່​ປິດ​ຢູ່​ໃນ​ວົງ​ເລັບ​, ແລະ​ຮູບ​ແບບ​ປະ​ສົມ​
ເຊິ່ງເບິ່ງຄືວ່າ "\p{name=value}", ຊຶ່ງຫມາຍຄວາມວ່າຈະກົງກັບຄຸນສົມບັດ "ຊື່" ສໍາລັບ
ລັກສະນະມີ "ຄຸນຄ່າ". ຕົວຢ່າງ, ການຈັບຄູ່ສໍາລັບຕົວເລກສາມາດຂຽນໄດ້
ເປັນ "/\pN/" ຫຼື "/\p{Number}/", ຫຼື "/\p{Number=True}/". ໂຕພິມນ້ອຍຖືກຈັບຄູ່
ໂດຍຊັບສິນ ໂຕພິມນ້ອຍ ເຊິ່ງມີຮູບແບບສັ້ນ Ll. ເຂົາເຈົ້າຕ້ອງການວົງເລັບ, ຄືກັນ
ຂຽນເປັນ "/\p{Ll}/" ຫຼື "/\p{Lowercase_Letter}/", ຫຼື
"/\p{General_Category=Lowercase_Letter}/" (ຂີດກ້ອງແມ່ນເປັນທາງເລືອກ). "/\pLl/" ແມ່ນ
ຖືກຕ້ອງ, ແຕ່ຫມາຍຄວາມວ່າບາງສິ່ງບາງຢ່າງທີ່ແຕກຕ່າງກັນ. ມັນກົງກັບສອງຕົວອັກສອນ: ຕົວອັກສອນ
(ຄຸນສົມບັດ Unicode "\pL"), ຕາມດ້ວຍຕົວພິມນ້ອຍ "l".

ຖ້າກົດລະບຽບທ້ອງຖິ່ນບໍ່ມີຜົນບັງຄັບໃຊ້, ການໃຊ້ຄຸນສົມບັດຂອງ Unicode ຈະບັງຄັບໃຫ້ປົກກະຕິ
ສະແດງອອກໃນການນໍາໃຊ້ກົດລະບຽບຂອງ Unicode, ຖ້າມັນບໍ່ມີແລ້ວ.

ໃຫ້ສັງເກດວ່າຄຸນສົມບັດເກືອບທັງຫມົດແມ່ນມີພູມຕ້ານທານກັບການຈັບຄູ່ກໍລະນີທີ່ບໍ່ລະອຽດອ່ອນ. ນັ້ນແມ່ນ, ເພີ່ມ
ຕົວແກ້ໄຂການສະແດງອອກປົກກະຕິ "/i" ບໍ່ປ່ຽນແປງສິ່ງທີ່ພວກເຂົາກົງກັນ. ມີສອງຊຸດ
ທີ່ໄດ້ຮັບຜົນກະທົບ. ຊຸດທໍາອິດແມ່ນ "ຕົວພິມໃຫຍ່", "ຕົວພິມນ້ອຍ", ແລະ
"Titlecase_Letter", ທັງໝົດນີ້ກົງກັບ "Cased_Letter" ພາຍໃຕ້ "/i" ການຈັບຄູ່. ຊຸດທີສອງ
ແມ່ນ "ຕົວພິມໃຫຍ່", "ຕົວພິມນ້ອຍ", ແລະ "ຕົວພິມນ້ອຍ", ເຊິ່ງທັງຫມົດນີ້ກົງກັບ "Cased" ພາຍໃຕ້ "/i"
ການຈັບຄູ່. (ຄວາມແຕກຕ່າງລະຫວ່າງຊຸດເຫຼົ່ານີ້ແມ່ນບາງສິ່ງ, ເຊັ່ນ: ຕົວເລກ Roman,
ມາເປັນຕົວພິມໃຫຍ່ ແລະ ໂຕນ້ອຍ, ດັ່ງນັ້ນພວກມັນແມ່ນ "Cased", ແຕ່ບໍ່ໄດ້ຖືກພິຈາລະນາເປັນ
ຕົວອັກສອນ, ດັ່ງນັ້ນພວກມັນບໍ່ແມ່ນ "Cased_Letter"s. ຕົວຈິງແລ້ວພວກເຂົາແມ່ນ "Letter_Number"s.) ຊຸດນີ້
ຍັງປະກອບມີຊຸດຍ່ອຍຂອງມັນ "PosixUpper" ແລະ "PosixLower", ທັງສອງອັນພາຍໃຕ້ຄໍາວ່າ "/i"
"PosixAlpha".

ສໍາລັບລາຍລະອຽດເພີ່ມເຕີມກ່ຽວກັບຄຸນສົມບັດຂອງ Unicode, ເບິ່ງ "ຄຸນສົມບັດຕົວອັກສອນ Unicode" ໃນ perlunicode;
ສໍາລັບບັນຊີລາຍຊື່ຄົບຖ້ວນຂອງຄຸນສົມບັດທີ່ເປັນໄປໄດ້, ເບິ່ງ "ຄຸນສົມບັດສາມາດເຂົ້າເຖິງໄດ້ໂດຍຜ່ານ \p{} ແລະ
\P{}" ໃນ perluniprops, ເຊິ່ງບັນທຶກທຸກຮູບແບບທີ່ມີຄວາມແຕກຕ່າງກັນ "/i".
ເປັນໄປໄດ້ທີ່ຈະກໍານົດຄຸນສົມບັດຂອງທ່ານເອງ. ນີ້ແມ່ນສົນທະນາໃນ "ລັກສະນະທີ່ກໍານົດໂດຍຜູ້ໃຊ້
ຄຸນສົມບັດ" ໃນ perlunicode.

ຄຸນສົມບັດຂອງ Unicode ຖືກກໍານົດ (ແປກໃຈ!) ພຽງແຕ່ຈຸດລະຫັດ Unicode. ເລີ່ມຕົ້ນໃນ
v5.20, ເມື່ອຈັບຄູ່ກັບ "\p" ແລະ "\P", Perl ປະຕິບັດຈຸດລະຫັດທີ່ບໍ່ແມ່ນ Unicode (ເຫຼົ່ານັ້ນ.
ສູງກວ່າຄ່າສູງສຸດຂອງ Unicode ທີ່ຖືກຕ້ອງຕາມກົດໝາຍຂອງ 0x10FFFF) ຄືກັບວ່າພວກມັນເປັນ Unicode ປົກກະຕິທີ່ບໍ່ໄດ້ມອບໝາຍ
ຈຸດລະຫັດ.

ກ່ອນທີ່ຈະ v5.20, Perl ໄດ້ຍົກຂຶ້ນມາເຕືອນແລະເຮັດໃຫ້ການແຂ່ງຂັນທັງຫມົດລົ້ມເຫລວໃນລະຫັດທີ່ບໍ່ແມ່ນ Unicode
ຈຸດ. ອັນນີ້ອາດຈະແປກໃຈບາງ:

(0x110000) =~ \p{ASCII_Hex_Digit=True} # ລົ້ມເຫລວໃນ Perls < v5.20.
(0x110000) =~ \p{ASCII_Hex_Digit=False} # ຍັງລົ້ມເຫລວໃນ Perls
# < v5.20

ເຖິງແມ່ນວ່າທັງສອງການແຂ່ງຂັນນີ້ອາດຈະຖືກຄິດວ່າເປັນການເສີມ, ຈົນກ່ວາ v5.20 ພວກເຂົາເປັນດັ່ງນັ້ນ
ສະເພາະຈຸດລະຫັດ Unicode.

ຕົວຢ່າງ

"a" =~ /\w/ # ການຈັບຄູ່, "a" ແມ່ນຕົວອັກສອນ 'ຄຳ'.
"7" =~ /\w/ # ການຈັບຄູ່, "7" ແມ່ນຕົວລະຄອນ 'ຄຳສັບ' ເຊັ່ນກັນ.
"a" =~ /\d/ # ບໍ່ກົງກັນ, "a" ບໍ່ແມ່ນຕົວເລກ.
"7" =~ /\d/ # ການຈັບຄູ່, "7" ແມ່ນຕົວເລກ.
" =~ /\s/ # ການຈັບຄູ່, ຊ່ອງຫວ່າງເປັນຊ່ອງຫວ່າງ.
"a" =~ /\D/ # ການຈັບຄູ່, "a" ແມ່ນຕົວເລກທີ່ບໍ່ແມ່ນຕົວເລກ.
"7" =~ /\D/ # ບໍ່ກົງກັນ, "7" ບໍ່ແມ່ນຕົວເລກ.
" =~ /\S/ # ບໍ່ກົງກັນ, ຊ່ອງຫວ່າງບໍ່ແມ່ນຊ່ອງຫວ່າງ.

" " =~ /\h/ # ການຈັບຄູ່, ຍະຫວ່າງແມ່ນຊ່ອງຫວ່າງທາງນອນ.
" =~ /\v/ # ບໍ່ກົງກັນ, ຍະຫວ່າງບໍ່ແມ່ນຊ່ອງຫວ່າງໃນແນວຕັ້ງ.
"\r" =~ /\v/ # ການຈັບຄູ່, ຜົນຕອບແທນແມ່ນຊ່ອງຫວ່າງແນວຕັ້ງ.

"a" =~ /\pL/ # ການຈັບຄູ່, "a" ແມ່ນຕົວອັກສອນ.
"a" =~ /\p{Lu}/ # ບໍ່ກົງກັນ, /\p{Lu}/ ກົງກັບຕົວພິມໃຫຍ່.

"\x{0e0b}" =~ /\p{Thai}/ # ກົງກັນ, \x{0e0b} ແມ່ນຕົວລະຄອນ
# 'ຕົວລະຄອນໄທຄືກັນ', ແລະນັ້ນແມ່ນໃນ
# ຫ້ອງຮຽນພາສາໄທ Unicode.
"a" =~ /\P{Lao}/ # ການຈັບຄູ່, ເປັນ "a" ບໍ່ແມ່ນຕົວໜັງສືລາວ.

ມັນເປັນມູນຄ່າທີ່ເນັ້ນຫນັກວ່າ "\d", "\w", ແລະອື່ນໆ, ກົງກັບຕົວອັກສອນດຽວ, ບໍ່ສົມບູນ
ຕົວເລກຫຼືຄໍາສັບຕ່າງໆ. ເພື່ອຈັບຄູ່ຕົວເລກ (ທີ່ປະກອບດ້ວຍຕົວເລກ), ໃຊ້ "\d+"; ກົງ​ກັບ​ຄໍາ​ສັບ​ໃດ​ຫນຶ່ງ​,
ໃຊ້ "\w+". ແຕ່ຄວນລະວັງການພິຈາລະນາຄວາມປອດໄພໃນການເຮັດເຊັ່ນນັ້ນ, ດັ່ງທີ່ໄດ້ກ່າວມາຂ້າງເທິງ.

ວົງເລັບ ລັກສະນະ ຫ້ອງຮຽນ
ຮູບແບບທີສາມຂອງຫ້ອງຮຽນຕົວອັກສອນທີ່ທ່ານສາມາດນໍາໃຊ້ໃນການສະແດງອອກປົກກະຕິ Perl ແມ່ນວົງເລັບ
ຫ້ອງຮຽນລັກສະນະ. ໃນ​ຮູບ​ແບບ​ທີ່​ງ່າຍ​ທີ່​ສຸດ​ຂອງ​ຕົນ​, ມັນ​ລາຍ​ຊື່​ຕົວ​ອັກ​ສອນ​ທີ່​ອາດ​ຈະ​ຖືກ​ຈັບ​ຄູ່​,
ອ້ອມຮອບດ້ວຍວົງເລັບສີ່ຫຼ່ຽມ, ແບບນີ້: "[aeiou]". ນີ້ກົງກັບຫນຶ່ງໃນ "a", "e", "i",
"o" ຫຼື "u". ເຊັ່ນດຽວກັບຫ້ອງຮຽນຕົວອັກສອນອື່ນໆ, ກົງກັບຕົວອັກສອນອັນໜຶ່ງ.* ເພື່ອຈັບຄູ່
ສະຕຣິງທີ່ຍາວກວ່າປະກອບດ້ວຍຕົວອັກສອນທີ່ໄດ້ກ່າວມາໃນຫ້ອງຮຽນຕົວອັກສອນ, ປະຕິບັດຕາມ
ປະເພດຕົວອັກສອນທີ່ມີຕົວກໍານົດປະລິມານ. ຕົວຢ່າງ, "[aeiou]+" ກົງກັບຕົວພິມນ້ອຍໜຶ່ງ ຫຼືຫຼາຍກວ່ານັ້ນ
ພະຍັນຊະນະພາສາອັງກິດ.

ການຊໍ້າຄືນຕົວອັກສອນໃນຫ້ອງຮຽນຕົວອັກສອນບໍ່ມີຜົນ; ມັນໄດ້ຖືກພິຈາລະນາທີ່ຈະຢູ່ໃນຊຸດ
ພຽງ​ແຕ່​ຄັ້ງ​ດຽວ.

ຕົວຢ່າງ:

"e" =~ /[aeiou]/ # ການຈັບຄູ່, ເປັນ "e" ຖືກລະບຸໄວ້ໃນຫ້ອງຮຽນ.
"p" =~ /[aeiou]/ # ບໍ່ກົງກັນ, "p" ບໍ່ໄດ້ລະບຸໄວ້ໃນຫ້ອງຮຽນ.
"ae" =~ /^[aeiou]$/ # ບໍ່ກົງກັນ, ຫ້ອງຮຽນຕົວອັກສອນຈະກົງກັນເທົ່ານັ້ນ
# ຕົວລະຄອນດຽວ.
"ae" =~ /^[aeiou]+$/ # ກົງກັນ, ເນື່ອງຈາກຕົວເລກ.

-------

* ມີສອງຂໍ້ຍົກເວັ້ນຕໍ່ກັບປະເພດຕົວອັກສອນທີ່ມີວົງເລັບທີ່ກົງກັບຕົວອັກສອນດຽວ
ເທົ່ານັ້ນ. ແຕ່ລະຄົນຮຽກຮ້ອງໃຫ້ມີການຈັດການພິເສດໂດຍ Perl ເພື່ອເຮັດໃຫ້ສິ່ງຕ່າງໆເຮັດວຽກ:

·ໃນເວລາທີ່ຫ້ອງຮຽນແມ່ນເພື່ອຈັບຄູ່ caselessly ພາຍໃຕ້ "/i" ກົດລະບຽບການຈັບຄູ່, ແລະລັກສະນະທີ່
ຖືກກ່າວເຖິງຢ່າງຊັດເຈນພາຍໃນຫ້ອງຮຽນກົງກັບລໍາດັບຫຼາຍຕົວອັກສອນ
ພາຍໃຕ້ກົດລະບຽບ Unicode, ຫ້ອງຮຽນຈະກົງກັບລໍາດັບນັ້ນ. ຍົກ​ຕົວ​ຢ່າງ,
Unicode ເວົ້າວ່າຕົວອັກສອນ "LATIN SMALL LETTER SHARP S" ຄວນກົງກັບລໍາດັບ
"ss" ພາຍໃຕ້ກົດລະບຽບ "/i". ດັ່ງນັ້ນ,

'ss' =~ /\A\N{Latin ໂຕອັກສອນນ້ອຍ SHARP S}\z/i # ກົງກັນ
'ss' =~ /\A[aeioust\N{LATIN ໂຕອັກສອນນ້ອຍ SHARP S}]\z/i # ກົງກັນ

ເພື່ອເຮັດສິ່ງນີ້, ຫ້ອງຮຽນຕ້ອງບໍ່ຖືກ inverted (ເບິ່ງ "ການປະຕິເສດ") ແລະລັກສະນະ
ຕ້ອງໄດ້ຮັບການລະບຸຢ່າງຊັດເຈນ, ແລະບໍ່ເປັນສ່ວນຫນຶ່ງຂອງຂອບເຂດຫຼາຍຕົວອັກສອນ (ບໍ່ແມ່ນແຕ່ເປັນ
ຫນຶ່ງໃນຈຸດສຸດທ້າຍຂອງມັນ). ("ຊ່ວງລັກສະນະ" ຈະຖືກອະທິບາຍໃນໄວໆນີ້.) ດັ່ງນັ້ນ,

'ss' =~ /\A[\0-\x{ff}]\z/ui # ບໍ່ກົງກັນ
'ss' =~ /\A[\0-\N{LATIN SMALL LETTER SHARP S}]\z/ui # ບໍ່ກົງກັນ
'ss' =~ /\A[\xDF-\xDF]\z/ui # ການແຂ່ງຂັນໃນເວທີ ASCII, ນັບຕັ້ງແຕ່
# \xDF ແມ່ນພາສາລະຕິນຕົວໜັງສືນ້ອຍ SHARP S,
# ແລະຂອບເຂດແມ່ນພຽງແຕ່ອັນດຽວ
# ອົງປະກອບ

ຈົ່ງຈື່ໄວ້ວ່າ ມັນບໍ່ແມ່ນຄວາມຄິດທີ່ດີທີ່ຈະລະບຸປະເພດຂອງຊ່ວງເຫຼົ່ານີ້.

· ບາງຊື່ທີ່ຮູ້ຈັກກັບ "\N{...}" ຫມາຍເຖິງລໍາດັບຂອງຕົວອັກສອນຫຼາຍອັນ, ແທນທີ່
ລັກສະນະດຽວປົກກະຕິ. ໃນເວລາທີ່ຫນຶ່ງໃນເຫຼົ່ານີ້ໄດ້ຖືກລວມເຂົ້າໃນຫ້ອງຮຽນ, ທັງຫມົດ
ລໍາດັບຖືກຈັບຄູ່. ຍົກ​ຕົວ​ຢ່າງ,

"\N{ຕົວອັກສອນພາສາຕາມິນ KA}\N{ຕົວໜັງສືພາສາຕາມິນ AU}"
=~ / ^ [\N{TAMIL SYLLABLE KAU}] $ /x;

ກົງກັນ, ເພາະວ່າ "\N{TAMIL SYLLABLE KAU}" ແມ່ນລຳດັບຊື່ທີ່ປະກອບດ້ວຍສອງອັນ.
ລັກສະນະກົງກັນກັບ. ເຊັ່ນດຽວກັນກັບຕົວຢ່າງອື່ນໆທີ່ຫ້ອງຮຽນ bracketed ສາມາດຈັບຄູ່ໄດ້
ຕົວອັກສອນຫຼາຍຕົວ, ແລະດ້ວຍເຫດຜົນທີ່ຄ້າຍຄືກັນ, ຫ້ອງຮຽນຕ້ອງບໍ່ຖືກປີ້ນ, ແລະ
ລໍາດັບທີ່ມີຊື່ອາດຈະບໍ່ປາກົດຢູ່ໃນຂອບເຂດໃດຫນຶ່ງ, ເຖິງແມ່ນວ່າຫນຶ່ງບ່ອນທີ່ມັນເປັນຈຸດສິ້ນສຸດທັງສອງ. ຖ້າ
ສິ່ງເຫຼົ່ານີ້ເກີດຂຶ້ນ, ມັນເປັນຄວາມຜິດພາດທີ່ຮ້າຍແຮງຖ້າຫາກວ່າຫ້ອງຮຽນລັກສະນະພາຍໃນຂະຫຍາຍ
"(?[...])" ຫ້ອງຮຽນ; ແລະພຽງແຕ່ຈຸດລະຫັດທໍາອິດຖືກນໍາໃຊ້ (ມີຄໍາເຕືອນ "regexp"-type
ຍົກຂຶ້ນມາ) ຖ້າບໍ່ດັ່ງນັ້ນ.

ພິເສດ ຕົວອັກສອນ ພາຍໃນ a ວົງເລັບ ລັກສະນະ ລະດັບ

ຕົວອັກສອນສ່ວນໃຫຍ່ທີ່ເປັນຕົວອັກສອນ meta ໃນສະແດງອອກປົກກະຕິ (ນັ້ນແມ່ນ, ຕົວອັກສອນທີ່
ປະຕິບັດຄວາມຫມາຍພິເສດເຊັ່ນ ".", "*", ຫຼື "(") ສູນເສຍຄວາມຫມາຍພິເສດຂອງພວກເຂົາແລະສາມາດນໍາໃຊ້ໄດ້
ພາຍໃນຫ້ອງຮຽນລັກສະນະໂດຍບໍ່ຈໍາເປັນຕ້ອງຫນີພວກເຂົາ. ຕົວຢ່າງ, "[()]" ກົງກັນ
ທັງວົງເລັບເປີດ, ຫຼືວົງເລັບປິດ, ແລະວົງເລັບພາຍໃນ
ຫ້ອງຮຽນຕົວອັກສອນບໍ່ຈັດກຸ່ມ ຫຼືຈັບ.

ຕົວອັກສອນທີ່ອາດມີຄວາມໝາຍພິເສດຢູ່ໃນກຸ່ມຕົວອັກສອນຄື: "\", "^", "-",
"[" ແລະ "]", ແລະໄດ້ຖືກປຶກສາຫາລືຂ້າງລຸ່ມນີ້. ພວກເຂົາສາມາດຖືກຫລົບຫນີດ້ວຍ backslash, ເຖິງແມ່ນວ່ານີ້
ບາງຄັ້ງບໍ່ຈໍາເປັນ, ໃນກໍລະນີ backslash ອາດຈະຖືກລະເວັ້ນ.

ລຳດັບ "\b" ແມ່ນພິເສດຢູ່ໃນຫ້ອງຮຽນຕົວອັກສອນທີ່ມີວົງເລັບ. ໃນຂະນະທີ່ຢູ່ນອກ
ປະເພດຕົວອັກສອນ, "\b" ແມ່ນການຢືນຢັນທີ່ຊີ້ບອກຈຸດທີ່ບໍ່ມີສອງຢ່າງ
ຕົວອັກສອນຄຳສັບ ຫຼື ຕົວອັກສອນທີ່ບໍ່ແມ່ນຄຳສອງອັນຢູ່ດ້ານໃດຂ້າງໜຶ່ງ, ພາຍໃນຕົວໜັງສືວົງເລັບ
class, "\b" ກົງກັບຕົວອັກສອນ backspace.

ລໍາດັບ "\a", "\c", "\e", "\f", "\n", "\N{NAME}", "\N{U+hex char}", "\r", "\t", ແລະ
"\x" ຍັງມີຄວາມພິເສດ ແລະມີຄວາມໝາຍຄືກັນກັບພວກມັນຢູ່ນອກຕົວອັກສອນທີ່ໝາຍວົງເລັບ
ຊັ້ນຮຽນ.

ນອກຈາກນັ້ນ, backslash ຕິດຕາມດ້ວຍສອງຫຼືສາມຕົວເລກແປດແມ່ນຖືວ່າເປັນຕົວເລກແປດ.

A "[" ບໍ່ແມ່ນພິເສດຢູ່ໃນຫ້ອງຮຽນຕົວອັກສອນ, ເວັ້ນເສຍແຕ່ວ່າມັນເປັນການເລີ່ມຕົ້ນຂອງຕົວອັກສອນ POSIX
class (ເບິ່ງ "POSIX Character Classes" ຂ້າງລຸ່ມນີ້). ປົກກະຕິແລ້ວມັນບໍ່ຈໍາເປັນຕ້ອງຫນີ.

A "]" ປົກກະຕິແລ້ວແມ່ນຈຸດສິ້ນສຸດຂອງຫ້ອງຮຽນຕົວອັກສອນ POSIX (ເບິ່ງ "POSIX Character Classes"
ຂ້າງລຸ່ມນີ້), ຫຼືມັນຈະສົ່ງສັນຍານການສິ້ນສຸດຂອງປະເພດຕົວອັກສອນທີ່ເຮັດດ້ວຍວົງເລັບ. ຖ້າທ່ານຕ້ອງການປະກອບ a
"]" ໃນຊຸດຂອງຕົວອັກສອນ, ໂດຍທົ່ວໄປແລ້ວທ່ານຕ້ອງຫນີມັນ.

ຢ່າງໃດກໍຕາມ, ຖ້າ "]" ແມ່ນ ຄັ້ງທໍາອິດ (ຫຼືທີສອງຖ້າຕົວອັກສອນທໍາອິດແມ່ນ cart)
ລັກ​ສະ​ນະ​ຂອງ​ລະ​ດັບ​ຕົວ​ອັກ​ສອນ​ວົງ​ເລັບ​, ມັນ​ບໍ່​ໄດ້​ຫມາຍ​ເຖິງ​ຕອນ​ທ້າຍ​ຂອງ​ຫ້ອງ​ຮຽນ (ດັ່ງ​ທີ່​ທ່ານ​
ບໍ່​ສາ​ມາດ​ມີ​ຫ້ອງ​ເປົ່າ​) ແລະ​ຖື​ວ່າ​ເປັນ​ສ່ວນ​ຫນຶ່ງ​ຂອງ​ຊຸດ​ຂອງ​ຕົວ​ອັກ​ສອນ​ທີ່​ສາ​ມາດ​ເປັນ​
ຈັບຄູ່ໂດຍບໍ່ມີການຫລົບຫນີ.

ຕົວຢ່າງ:

"+" =~ /[+?*]/ # ການຈັບຄູ່, "+" ໃນຫ້ອງຮຽນຕົວອັກສອນບໍ່ແມ່ນພິເສດ.
"\cH" =~ /[\b]/ # ກົງກັນ, \b ພາຍໃນຫ້ອງຮຽນຕົວອັກສອນ
# ເທົ່າກັບ backspace.
"]" =~ /[][]/ # ການຈັບຄູ່, ຍ້ອນວ່າຫ້ອງຮຽນຕົວອັກສອນປະກອບມີ
# ທັງ​ສອງ​ແລະ ].
"[]" =~ /[[]]/ # ການຈັບຄູ່, ຮູບແບບມີຫ້ອງຮຽນຕົວອັກສອນ
# ປະກອບມີພຽງແຕ່ [, ແລະຫ້ອງຮຽນຕົວອັກສອນແມ່ນ
# ຕາມດ້ວຍ ].

ລັກສະນະ ຊ່ວງ

ມັນບໍ່ແມ່ນເລື່ອງແປກທີ່ຕ້ອງການທີ່ຈະກົງກັບຂອບເຂດຂອງຕົວອັກສອນ. ໂຊກດີ, ແທນທີ່ຈະລາຍຊື່ທັງຫມົດ
ຕົວ​ອັກ​ສອນ​ໃນ​ລະ​ດັບ​, ຫນຶ່ງ​ອາດ​ຈະ​ນໍາ​ໃຊ້​ຂີດ​ຫມາຍ​ເລກ ("-"​)​. ຖ້າຢູ່ໃນຕົວອັກສອນທີ່ມີວົງເລັບ
ຫ້ອງຮຽນທ່ານມີສອງຕົວອັກສອນທີ່ແຍກອອກດ້ວຍຂີດໝາຍ, ມັນຖືກປະຕິບັດຄືກັບຕົວອັກສອນທັງໝົດ
ລະຫວ່າງສອງຄົນຢູ່ໃນຫ້ອງຮຽນ. ຕົວຢ່າງ, "[0-9]" ກົງກັບຕົວເລກ ASCII ໃດ, ແລະ
"[am]" ກົງກັບຕົວອັກສອນຕົວພິມນ້ອຍຈາກເຄິ່ງທໍາອິດຂອງຕົວອັກສອນ ASCII.

ກະລຸນາຮັບຊາບວ່າຕົວອັກສອນສອງຕົວຢູ່ດ້ານໃດດ້ານໜຶ່ງຂອງຂີດໝາຍບໍ່ຈຳເປັນແມ່ນຕົວໜັງສືທັງສອງ
ຫຼືທັງສອງຕົວເລກ. ລັກສະນະໃດກໍ່ເປັນໄປໄດ້, ເຖິງແມ່ນວ່າບໍ່ສົມຄວນ. "['-?]" ມີ a
ຂອບເຂດຂອງຕົວອັກສອນ, ແຕ່ຄົນສ່ວນໃຫຍ່ຈະບໍ່ຮູ້ວ່າຕົວອັກສອນໃດຫມາຍຄວາມວ່າ.
ນອກຈາກນັ້ນ, ຊ່ວງດັ່ງກ່າວອາດຈະນໍາໄປສູ່ບັນຫາການເຄື່ອນທີ່ຖ້າລະຫັດຕ້ອງດໍາເນີນການກ່ຽວກັບ a
ເວທີທີ່ໃຊ້ຊຸດຕົວອັກສອນທີ່ແຕກຕ່າງກັນ, ເຊັ່ນ: EBCDIC.

ຖ້າຂີດໝາຍໃນກຸ່ມຕົວອັກສອນບໍ່ສາມາດເປັນສ່ວນໜຶ່ງຂອງໄລຍະໃດໜຶ່ງໄດ້, ຕົວຢ່າງ
ເນື່ອງຈາກວ່າມັນເປັນລັກສະນະທໍາອິດຫຼືສຸດທ້າຍຂອງຫ້ອງຮຽນລັກສະນະ, ຫຼືຖ້າຫາກວ່າມັນທັນທີ
ປະຕິບັດຕາມໄລຍະໃດໜຶ່ງ, ຂີດໝາຍບໍ່ພິເສດ, ແລະດັ່ງນັ້ນຈຶ່ງຖືວ່າເປັນຕົວລະຄອນທີ່ຈະຈັບຄູ່
ຮູ້ຫນັງສື. ຖ້າທ່ານຕ້ອງການຍັບຍັ້ງໃນຊຸດຕົວອັກສອນຂອງທ່ານໃຫ້ກົງກັນແລະຕໍາແຫນ່ງຂອງມັນ
ຢູ່ໃນຫ້ອງຮຽນແມ່ນວ່າມັນສາມາດໄດ້ຮັບການພິຈາລະນາເປັນສ່ວນຫນຶ່ງຂອງລະດັບໃດຫນຶ່ງ, ທ່ານຕ້ອງຫນີຈາກນັ້ນ
ຍັບຍັ້ງດ້ວຍ backslash.

ຕົວຢ່າງ:

[az] # ກົງກັບຕົວອັກສອນທີ່ເປັນຕົວພິມນ້ອຍ ASCII.
[a-fz] # ກົງກັບຕົວອັກສອນໃດນຶ່ງລະຫວ່າງ 'a' ແລະ 'f' (ຮວມ) ຫຼື
# ຕົວອັກສອນ 'z'.
[-z] # ຈັບຄູ່ກັນເປັນຂີດໝາຍ ('-') ຫຼືຕົວອັກສອນ 'z'.
[afm] # ຈັບຄູ່ຕົວອັກສອນໃດນຶ່ງລະຫວ່າງ 'a' ແລະ 'f' (ລວມ), the
# ຍັບຍັ້ງ ('-'), ຫຼືຕົວອັກສອນ 'm'.
['-?] # ກົງກັບຕົວອັກສອນໃດນຶ່ງ '()*+,-./0123456789:;<=>?
# (ແຕ່ບໍ່ແມ່ນຢູ່ໃນເວທີ EBCDIC).
[\N{APOSTROPHE}-\N{QUESTION MARK}]
# ກົງກັບຕົວລະຄອນໃດນຶ່ງ '()*+,-./0123456789:;<=>?
# ເຖິງແມ່ນວ່າຢູ່ໃນເວທີ EBCDIC.
[\N{U+27}-\N{U+3F}] # ອັນດຽວກັນ. (U+27 ແມ່ນ "'", ແລະ U+3F ແມ່ນ "?")

ໃນ​ຖາ​ນະ​ເປັນ​ສອງ​ຕົວ​ຢ່າງ​ສຸດ​ທ້າຍ​ຂ້າງ​ເທິງ​ສະ​ແດງ​ໃຫ້​ເຫັນ​, ທ່ານ​ສາ​ມາດ​ບັນ​ລຸ​ການ​ເຄື່ອນ​ໄຫວ​ກັບ​ເວ​ທີ​ທີ່​ບໍ່​ແມ່ນ ASCII ໂດຍ​
ໃຊ້ແບບຟອມ "\N{...}" ສໍາລັບຈຸດສິ້ນສຸດໄລຍະ. ເຫຼົ່ານີ້ຊີ້ບອກວ່າຂອບເຂດທີ່ກໍານົດໄວ້
ຈະຖືກຕີຄວາມໝາຍໂດຍໃຊ້ຄ່າຂອງ Unicode, ສະນັ້ນ "[\N{U+27}-\N{U+3F}]" ຫມາຍເຖິງການຈັບຄູ່.
"\N{U+27}", "\N{U+28}", "\N{U+29}", ..., "\N{U+3D}", "\N{U+ 3E}", ແລະ "\N{U+3F}", ໃດກໍ່ຕາມ
ສະບັບພາສາຈຸດລະຫັດພື້ນເມືອງສໍາລັບຜູ້ທີ່ມີ. ເຫຼົ່ານີ້ເອີ້ນວ່າ "Unicode". ຖ້າ
ທັງສອງທ້າຍແມ່ນຂອງຮູບແບບ "\N{...}", ຊ່ວງແມ່ນຖືວ່າເປັນ Unicode. ຄໍາເຕືອນ "regexp".
ໄດ້ຖືກຍົກຂຶ້ນມາພາຍໃຕ້ "ໃຊ້ re 'ເຄັ່ງຄັດ'" ຖ້າຈຸດສຸດທ້າຍອື່ນໆຖືກລະບຸທີ່ບໍ່ແມ່ນ portable:

[\N{U+00}-\x09] # ຄຳເຕືອນພາຍໃຕ້ 'ເຂັ້ມງວດ'; \x09 ແມ່ນບໍ່ສາມາດພົກພາໄດ້
[\N{U+00}-\t] # ບໍ່ມີຄຳເຕືອນ;

ທັງສອງອັນຂ້າງເທິງນີ້ກົງກັບຕົວອັກສອນ "\N{U+00}" "\N{U+01}", ... "\N{U+08}", "\N{U+09}",
ແຕ່ "\x09" ເບິ່ງຄືວ່າມັນອາດຈະເປັນຄວາມຜິດພາດດັ່ງນັ້ນການເຕືອນໄດ້ຖືກຍົກຂຶ້ນມາ (ພາຍໃຕ້ "re
'ເຄັ່ງຄັດ') ສໍາລັບມັນ.

Perl ຍັງຮັບປະກັນວ່າຊ່ວງ "AZ", "az", "0-9", ແລະລະດັບຍ່ອຍຂອງການແຂ່ງຂັນເຫຼົ່ານີ້.
ສິ່ງທີ່ຜູ້ເວົ້າພາສາອັງກິດເທົ່ານັ້ນທີ່ຄາດຫວັງໃຫ້ພວກເຂົາກົງກັນໃນເວທີໃດກໍ່ຕາມ. ນັ້ນແມ່ນ, "[AZ]"
ກົງກັບ 26 ໂຕພິມໃຫຍ່ ASCII; "[az]" ກົງກັບ 26 ຕົວພິມນ້ອຍ; ແລະ
"[0-9]" ກົງກັບ 10 ຕົວເລກ. Subranges, ເຊັ່ນ "[hk]", ກົງກັນກົງກັນ, ໃນນີ້
ກໍລະນີພຽງແຕ່ສີ່ຕົວອັກສອນ "h", "i", "j", ແລະ "k". ນີ້ແມ່ນພຶດຕິກໍາທໍາມະຊາດຂອງ ASCII
ເວທີທີ່ຈຸດລະຫັດ (ຄ່າປົກກະຕິ) ສໍາລັບ "h" ຜ່ານ "k" ແມ່ນຕິດຕໍ່ກັນ
ຈຳນວນເຕັມ (0x68 ຫາ 0x6B). ແຕ່ການຈັດການພິເສດເພື່ອບັນລຸເປົ້າຫມາຍນີ້ອາດຈະຈໍາເປັນ
ເວທີທີ່ມີຊຸດຕົວອັກສອນພື້ນເມືອງທີ່ບໍ່ແມ່ນ ASCII. ຕົວຢ່າງ, ໃນເວທີ EBCDIC, the
ຈຸດລະຫັດສໍາລັບ "h" ແມ່ນ 0x88, "i" ແມ່ນ 0x89, "j" ແມ່ນ 0x91, ແລະ "k" ແມ່ນ 0x92. Perl ພິເສດ
ປະຕິບັດ "[hk]" ເພື່ອຍົກເວັ້ນເຈັດຈຸດລະຫັດໃນຊ່ອງຫວ່າງ: 0x8A ຫາ 0x90. ນີ້
ການຈັດການພິເສດແມ່ນຖືກເອີ້ນພຽງແຕ່ເມື່ອໄລຍະແມ່ນ subrange ຂອງຫນຶ່ງໃນ ASCII
ຕົວພິມນ້ອຍ, ຕົວພິມນ້ອຍ, ແລະໄລຍະຕົວເລກ, ແລະແຕ່ລະຈຸດສິ້ນສຸດຂອງໄລຍະແມ່ນສະແດງອອກເປັນ a
ຕົວອັກສອນເຊັ່ນ "A", ຫຼືເປັນຕົວອັກສອນທີ່ມີຊື່ ("\N{...}", ລວມທັງແບບຟອມ "\N{U+...").

ຕົວຢ່າງ EBCDIC:

[ij] # ກົງກັບ "i" ຫຼື "j"
[i-\N{Latin SMALL Letter J}] # ຄືກັນ
[i-\N{U+6A}] # ຄືກັນ
[\N{U+69}-\N{U+6A}] # ອັນດຽວກັນ
[\x{89}-\x{91}] # ຈັບຄູ່ 0x89 ("i"), 0x8A.. 0x90, 0x91 ("j")
[i-\x{91}] # ຄືກັນ
[\x{89}-j] # ຄືກັນ
[iJ] # ຈັບຄູ່, 0x89 ("i").. 0xC1 ("J"); ພິເສດ
# ການຈັດການບໍ່ໄດ້ນຳໃຊ້ເນື່ອງຈາກມີໄລຍະປະສົມກັນ
# ກໍລະນີ

ການເຈລະຈາ

ມັນເປັນໄປໄດ້ແທນທີ່ຈະຂຽນຕົວອັກສອນທີ່ທ່ານບໍ່ຕ້ອງການທີ່ຈະກົງກັນ. ເຈົ້າສາມາດເຮັດແນວນັ້ນໄດ້
ໂດຍ​ການ​ນໍາ​ໃຊ້ cart ("^"​) ເປັນ​ຕົວ​ອັກ​ສອນ​ທໍາ​ອິດ​ໃນ​ຫ້ອງ​ອັກ​ສອນ​. ຕົວ​ຢ່າງ,
"[^az]" ກົງກັບຕົວອັກສອນທີ່ບໍ່ແມ່ນຕົວອັກສອນ ASCII ໂຕພິມນ້ອຍ, ດັ່ງນັ້ນ
ປະກອບມີຫຼາຍກ່ວາລ້ານຈຸດລະຫັດ Unicode. ຫ້ອງຮຽນແມ່ນເວົ້າວ່າ "negated" ຫຼື
"ປີ້ນ".

syntax ນີ້ເຮັດໃຫ້ cart ມີລັກສະນະພິເສດພາຍໃນຫ້ອງຮຽນຕົວອັກສອນວົງເລັບ, ແຕ່
ພຽງແຕ່ຖ້າວ່າມັນເປັນລັກສະນະທໍາອິດຂອງຫ້ອງຮຽນ. ດັ່ງນັ້ນຖ້າຫາກວ່າທ່ານຕ້ອງການ caret ເປັນຫນຶ່ງໃນ
ຕົວອັກສອນທີ່ຈະກົງກັນ, ບໍ່ວ່າຈະຫນີ cart ຫຼືອື່ນ ໆ ບໍ່ໄດ້ບອກມັນກ່ອນ.

ໃນຫ້ອງຮຽນຕົວອັກສອນວົງເລັບ inverted, Perl ບໍ່ສົນໃຈກົດລະບຽບ Unicode ທີ່ເວົ້າຕາມປົກກະຕິ
ລໍາດັບທີ່ຕັ້ງຊື່, ແລະຕົວອັກສອນທີ່ແນ່ນອນຄວນກົງກັບລໍາດັບຂອງຫຼາຍຕົວອັກສອນ
ໃຊ້ພາຍໃຕ້ການຈັບຄູ່ "/i" caseless. ການປະຕິບັດຕາມກົດລະບຽບເຫຼົ່ານັ້ນສາມາດນໍາໄປສູ່ຄວາມສັບສົນຫຼາຍ
ສະຖານະການ:

"ss" =~ /^[^\xDF]+$/ui; #ການແຂ່ງຂັນ!

ອັນນີ້ຄວນກົງກັບລໍາດັບຂອງຕົວອັກສອນທີ່ບໍ່ແມ່ນ "\xDF" ຫຼື "\xDF" ກົງກັບອັນໃດ.
ພາຍໃຕ້ "/i". "s" ບໍ່ແມ່ນ "\xDF", ແຕ່ Unicode ເວົ້າວ່າ "ss" ແມ່ນສິ່ງທີ່ "\xDF" ກົງກັບພາຍໃຕ້.
"/i". ດັ່ງນັ້ນອັນໃດ "ຊະນະ"? ທ່ານລົ້ມເຫລວໃນການແຂ່ງຂັນເພາະວ່າສະຕຣິງມີ "ss" ຫຼືຍອມຮັບມັນ
ເນື່ອງຈາກວ່າມັນມີ "s" ຕິດຕາມດ້ວຍ "s" ອື່ນ? Perl ໄດ້ເລືອກອັນສຸດທ້າຍ. (ເບິ່ງບັນທຶກໃນ
"ປະເພດຕົວອັກສອນທີ່ມີວົງເລັບ" ຂ້າງເທິງ.)

ຕົວຢ່າງ:

"e" =~ /[^aeiou]/ # ບໍ່ກົງກັນ, 'e' ຢູ່ໃນລາຍຊື່.
"x" =~ /[^aeiou]/ # ການຈັບຄູ່, ດັ່ງທີ່ 'x' ບໍ່ແມ່ນຕົວພິມນ້ອຍ.
"^" =~ /[^^]/ # ບໍ່ກົງກັນ, ກົງກັບອັນໃດທີ່ບໍ່ເປັນຄາຖາ.
"^" =~ /[x^]/ # ການຈັບຄູ່, cart ບໍ່ແມ່ນພິເສດຢູ່ທີ່ນີ້.

backslash ລໍາດັບ

ທ່ານ​ສາ​ມາດ​ວາງ​ລະ​ດັບ​ຕົວ​ອັກ​ສອນ​ຕາມ​ລໍາ​ດັບ backslash (ຍົກ​ເວັ້ນ "\N​" ແລະ "\R​"​)
ພາຍໃນຫ້ອງຮຽນຕົວອັກສອນທີ່ມີວົງເລັບ, ແລະມັນຈະປະຕິບັດຄືກັບວ່າທ່ານໄດ້ໃສ່ຕົວອັກສອນທັງຫມົດ
ຖືກຈັບຄູ່ໂດຍລໍາດັບ backslash ພາຍໃນຫ້ອງຮຽນຕົວອັກສອນ. ຕົວຢ່າງ, "[af\d]"
ກົງກັບຕົວເລກທົດສະນິຍົມ, ຫຼືຕົວພິມນ້ອຍລະຫວ່າງ 'a' ແລະ 'f' ຮວມ.

"\N" ພາຍໃນໝວດຕົວອັກສອນທີ່ໝາຍວົງເລັບຕ້ອງເປັນຮູບແບບ "\N{ຊື່}" ຫຼື "\N{U+hex
char}", ແລະບໍ່ແມ່ນຮູບແບບທີ່ກົງກັບເສັ້ນທີ່ບໍ່ແມ່ນເສັ້ນໃຫມ່, ສໍາລັບເຫດຜົນດຽວກັນກັບຈຸດ "."
ພາຍໃນຫ້ອງຮຽນຕົວອັກສອນວົງເລັບສູນເສຍຄວາມຫມາຍພິເສດຂອງມັນ: ມັນກົງກັບເກືອບທຸກຢ່າງ,
ເຊິ່ງໂດຍທົ່ວໄປແລ້ວບໍ່ແມ່ນສິ່ງທີ່ທ່ານຕ້ອງການໃຫ້ເກີດຂຶ້ນ.

ຕົວຢ່າງ:

/[\p{Thai}\d]/ # ກົງກັບຕົວອັກສອນທີ່ເປັນພາສາໄທ
# ຕົວອັກສອນ, ຫຼືຕົວເລກ.
/[^\p{Arabic}()]/ # ກົງກັບຕົວອັກສອນທີ່ບໍ່ແມ່ນພາສາອາຣັບ
# ຕົວອັກສອນ, ຫຼືວົງເລັບ.

ຫ້ອງຮຽນຕົວອັກສອນຕາມລຳດັບ Backslash ບໍ່ສາມາດເປັນໜຶ່ງໃນຈຸດສິ້ນສຸດຂອງໄລຍະໃດໜຶ່ງໄດ້. ດັ່ງນັ້ນ,
ທ່ານບໍ່ສາມາດເວົ້າວ່າ:

/[\p{Thai}-\d]/ # ຜິດ!

POSIX ລັກສະນະ ຫ້ອງຮຽນ

ຫ້ອງຮຽນຕົວອັກສອນ POSIX ມີຮູບແບບ "[:class:]", ບ່ອນທີ່ ລະດັບ ແມ່ນຊື່, ແລະ "[:"
ແລະ ":]" ຕົວຂັ້ນ. ຫ້ອງຮຽນຕົວອັກສອນ POSIX ປາກົດເທົ່ານັ້ນ ພາຍໃນ ຕົວອັກສອນວົງເລັບ
ຫ້ອງຮຽນ, ແລະເປັນວິທີທີ່ສະດວກແລະອະທິບາຍຂອງລາຍຊື່ກຸ່ມຂອງລັກສະນະ.

ລະມັດລະວັງກ່ຽວກັບ syntax,

# ຖືກຕ້ອງ:
$string =~ /[[:alpha:]]/

# ບໍ່ຖືກຕ້ອງ (ຈະເຕືອນ):
$string =~ /[:alpha:]/

ຮູບແບບສຸດທ້າຍຈະເປັນປະເພດຕົວອັກສອນທີ່ປະກອບດ້ວຍຈໍ້າສອງເມັດ, ແລະຕົວອັກສອນ "a",
"l", "p" ແລະ "h".

ຫ້ອງຮຽນຕົວອັກສອນ POSIX ສາມາດເປັນສ່ວນຫນຶ່ງຂອງຫ້ອງຮຽນຕົວອັກສອນທີ່ມີວົງເລັບໃຫຍ່ກວ່າ. ຍົກ​ຕົວ​ຢ່າງ,

[01[:alpha:]%]

ຖືກຕ້ອງ ແລະກົງກັບ '0', '1', ຕົວອັກສອນຕົວໜັງສືໃດນຶ່ງ, ແລະເຄື່ອງໝາຍສ່ວນຮ້ອຍ.

Perl ຮັບຮູ້ປະເພດຕົວອັກສອນ POSIX ຕໍ່ໄປນີ້:

alpha ຕົວອັກສອນໃດກໍໄດ້ ("[A-Za-z]").
alnum ຕົວອັກສອນທີ່ເປັນຕົວເລກ ແລະ ຕົວອັກສອນ ("[A-Za-z0-9]").
ascii ຕົວອັກສອນໃດນຶ່ງໃນຊຸດຕົວອັກສອນ ASCII.
blank A ສ່ວນຂະຫຍາຍ GNU, ເທົ່າກັບຊ່ອງຫວ່າງ ຫຼືແຖບແນວນອນ ("\t").
cntrl ລັກສະນະການຄວບຄຸມໃດໆ. ເບິ່ງຫມາຍເຫດ [2] ຂ້າງລຸ່ມນີ້.
digit ຕົວເລກທົດສະນິຍົມໃດນຶ່ງ ("[0-9]"), ເທົ່າກັບ "\d".
graph ຕົວອັກສອນທີ່ສາມາດພິມໄດ້, ບໍ່ລວມຊ່ອງຫວ່າງ. ເບິ່ງຫມາຍເຫດ [3] ຂ້າງລຸ່ມນີ້.
ຕົວອັກສອນຕົວພິມນ້ອຍ ("[az]").
ພິມຕົວອັກສອນທີ່ສາມາດພິມໄດ້, ລວມທັງຊ່ອງຫວ່າງ. ເບິ່ງຫມາຍເຫດ [4] ຂ້າງລຸ່ມນີ້.
punct ລັກສະນະກາຟິກບໍ່ລວມເອົາຕົວອັກສອນ "ຄໍາ". ຫມາຍເຫດ [5].
space ຕົວອັກສອນຊ່ອງຫວ່າງໃດໆ. "\s" ລວມທັງແຖບຕັ້ງ
("\cK").
ຕົວອັກສອນຕົວພິມໃຫຍ່ໃດນຶ່ງ ("[AZ]").
word A Perl extension ("[A-Za-z0-9_]"), ທຽບເທົ່າກັບ "\w".
xdigit ເລກຖານສິບຫົກໃດໆກໍຕາມ ("[0-9a-fA-F]").

ເຊັ່ນດຽວກັນກັບຄຸນສົມບັດຂອງ Unicode, ຄຸນສົມບັດ POSIX ສ່ວນໃຫຍ່ຈະກົງກັນໂດຍບໍ່ຄໍານຶງເຖິງ
ບໍ່ວ່າຈະເປັນການຈັບຄູ່ຕົວພິມນ້ອຍ ("/i") ແມ່ນມີຜົນຫຼືບໍ່. ສອງຂໍ້ຍົກເວັ້ນແມ່ນ
"[:upper:]" ແລະ "[:lower:]". ພາຍໃຕ້ "/i", ພວກເຂົາແຕ່ລະກົງກັບສະຫະພັນຂອງ "[:upper:]" ແລະ
"[:ຕ່ໍາກວ່າ:]".

ຫ້ອງຮຽນຕົວອັກສອນ POSIX ສ່ວນໃຫຍ່ມີສອງຕົວປະກອບຄຸນສົມບັດ "\p" ແບບ Unicode. (ພວກ​ເຂົາ​ແມ່ນ
ບໍ່ແມ່ນຄຸນສົມບັດຂອງ Unicode ຢ່າງເປັນທາງການ, ແຕ່ການຂະຫຍາຍ Perl ໄດ້ມາຈາກ Unicode ຢ່າງເປັນທາງການ
ຄຸນສົມບັດ.) ຕາຕະລາງຂ້າງລຸ່ມນີ້ສະແດງໃຫ້ເຫັນຄວາມສໍາພັນລະຫວ່າງຫ້ອງຮຽນຕົວອັກສອນ POSIX ແລະເຫຼົ່ານີ້
ຄູ່ຮ່ວມງານຂອງ.

ຄູ່ໜຶ່ງ, ໃນຖັນທີ່ມີປ້າຍກຳກັບ "ASCII-range Unicode" ໃນຕາຕະລາງ, ກົງກັນເທົ່ານັ້ນ
ຕົວອັກສອນໃນຊຸດຕົວອັກສອນ ASCII.

ຄູ່ອື່ນໆ, ໃນຖັນທີ່ມີປ້າຍຊື່ "Unicode ເຕັມ", ກົງກັບອັນໃດນຶ່ງ
ຕົວອັກສອນທີ່ເຫມາະສົມໃນຊຸດຕົວອັກສອນ Unicode ເຕັມ. ຕົວຢ່າງ, "\p{Alpha}"
ກົງກັນບໍ່ພຽງແຕ່ຕົວອັກສອນ ASCII, ແຕ່ຕົວອັກສອນໃດໆໃນ Unicode ທັງໝົດ
ຊຸດຕົວອັກສອນຖືວ່າເປັນຕົວອັກສອນ. ລາຍການຢູ່ໃນຖັນທີ່ມີປ້າຍຊື່ "ລໍາດັບ backslash"
ແມ່ນ (ສັ້ນ) ທຽບເທົ່າ.

[[:...:]] ASCII-range Full-range backslash Note
Unicode Unicode ລຳດັບ
-------------------------------------------------- ---
alpha \p{PosixAlpha} \p{XPosixAlpha}
Alnum \p{PosixAlnum} \p{XPosixAlnum}
ascii \p{ASCII}
ຫວ່າງ \p{PosixBlank} \p{XPosixBlank} \h [1]
ຫຼື \p{HorizSpace} [1]
cntrl \p{PosixCntrl} \p{XPosixCntrl} [2]
digit \p{PosixDigit} \p{XPosixDigit} \d
ກຣາຟ \p{PosixGraph} \p{XPosixGraph} [3]
ຕ່ໍາ \p{PosixLower} \p{XPosixLower}
ພິມ \p{PosixPrint} \p{XPosixPrint} [4]
punct \p{PosixPunct} \p{XPosixPunct} [5]
\p{PerlSpace} \p{XPerlSpace} \s [6]
space \p{PosixSpace} \p{XPosixSpace} [6]
ເທິງ \p{PosixUpper} \p{XPosixUpper}
ຄໍາ \p{PosixWord} \p{XPosixWord} \w
xdigit \p{PosixXDigit} \p{XPosixXDigit}

[1] "\p{Blank}" ແລະ "\p{HorizSpace}" ແມ່ນຄໍາສັບຄ້າຍຄືກັນ.

[2​] ລັກ​ສະ​ນະ​ການ​ຄວບ​ຄຸມ​ບໍ່​ໄດ້​ຜະ​ລິດ​ຜົນ​ຜະ​ລິດ​ດັ່ງ​ນັ້ນ​, ແຕ່​ປົກ​ກະ​ຕິ​ແລ້ວ​ແທນ​ທີ່​ຈະ​ຄວບ​ຄຸມ​
terminal somehow: ສໍາ​ລັບ​ການ​ຍົກ​ຕົວ​ຢ່າງ​, newline ແລະ backspace ແມ່ນ​ຕົວ​ອັກ​ສອນ​ການ​ຄວບ​ຄຸມ​. ໃນ ASCII
ເວທີ, ໃນຂອບເຂດ ASCII, ຕົວອັກສອນທີ່ມີຈຸດລະຫັດລະຫວ່າງ 0 ຫາ 31
ຮວມ, ບວກ 127 ("DEL") ແມ່ນຕົວອັກສອນຄວບຄຸມ; ໃນເວທີ EBCDIC, ຂອງພວກເຂົາ
ຄູ່ແມ່ນຕົວລະຄອນຄວບຄຸມ.

[3​] ລັກ​ສະ​ນະ​ທີ່​ເປັນ​ ຮູບພາບ, ນັ້ນແມ່ນ, ສັງເກດເຫັນ. ຫ້ອງຮຽນນີ້ປະກອບດ້ວຍທັງຫມົດ
ຕົວອັກສອນທີ່ເປັນຕົວເລກ ແລະຕົວອັກສອນທັງໝົດ.

[4​] ຕົວ​ອັກ​ສອນ​ທີ່​ພິມ​ໄດ້​ທັງ​ຫມົດ​, ເຊິ່ງ​ແມ່ນ​ຊຸດ​ຂອງ​ຕົວ​ອັກ​ສອນ​ຮູບ​ພາບ​ທັງ​ຫມົດ​ບວກ​ກັບ​ທີ່​
ຕົວອັກສອນຊ່ອງຫວ່າງທີ່ບໍ່ແມ່ນຕົວຄວບຄຸມ.

[5] "\p{PosixPunct}" ແລະ "[[:punct:]]" ໃນຂອບເຂດ ASCII ກົງກັບທຸກການຄວບຄຸມທີ່ບໍ່ແມ່ນການຄວບຄຸມ, ບໍ່ແມ່ນ.
ຕົວອັກສອນ ແລະ ຕົວເລກ, ຕົວອັກສອນທີ່ບໍ່ແມ່ນຍະຫວ່າງ: "[-!"#$%&'()*+,./:;<=>?@[\\\]^_`{|}~]" (ເຖິງແມ່ນວ່າ
ຖ້າທ້ອງຖິ່ນມີຜົນ, ມັນສາມາດປ່ຽນແປງພຶດຕິກໍາຂອງ "[[:punct:]]").

ຄຸນສົມບັດທີ່ມີຊື່ຄ້າຍຄືກັນ, "\p{Punct}", ກົງກັບຊຸດທີ່ແຕກຕ່າງເລັກນ້ອຍໃນ
ໄລຍະ ASCII, ຄື "[-!"#%&'()*,./:;?@[\\\]_{}]".
ຕົວອັກສອນ "[$+<=>^`|~]". ນີ້ແມ່ນຍ້ອນວ່າ Unicode ແຍກສິ່ງທີ່ POSIX ຖືວ່າເປັນ
ເຄື່ອງໝາຍວັກຕອນເປັນສອງປະເພດ, ເຄື່ອງໝາຍວັກຕອນ ແລະ ສັນຍາລັກ.

"\p{XPosixPunct}" ແລະ (ພາຍໃຕ້ກົດລະບຽບຂອງ Unicode) "[[:punct:]]", ກົງກັບສິ່ງທີ່ "\p{PosixPunct}"
ກົງກັນໃນໄລຍະ ASCII, ບວກກັບສິ່ງທີ່ "\p{Punct}" ກົງກັນ. ນີ້ແມ່ນແຕກຕ່າງກັນຫຼາຍກ່ວາ
ກົງກັນຢ່າງເຂັ້ມງວດຕາມ "\p{Punct}". ອີກວິທີຫນຶ່ງທີ່ຈະເວົ້າວ່າມັນແມ່ນວ່າຖ້າ Unicode
ກົດລະບຽບມີຜົນບັງຄັບໃຊ້, "[[:punct:]]" ກົງກັບຕົວອັກສອນທັງໝົດທີ່ Unicode ພິຈາລະນາ
ເຄື່ອງໝາຍວັກຕອນ, ບວກກັບຕົວອັກສອນໄລຍະ ASCII ທັງໝົດທີ່ Unicode ພິຈາລະນາສັນຍາລັກ.

[6] "\p{XPerlSpace}" ແລະ "\p{Space}" ກົງກັນໂດຍເລີ່ມຕົ້ນດ້ວຍ Perl v5.18. ໃນ
ລຸ້ນກ່ອນໜ້າ, ສິ່ງເຫຼົ່ານີ້ແຕກຕ່າງກັນພຽງແຕ່ຢູ່ໃນການຈັບຄູ່ທີ່ບໍ່ແມ່ນທ້ອງຖິ່ນ, "\p{XPerlSpace}"
ບໍ່ກົງກັບແຖບແນວຕັ້ງ, "\cK". ດຽວກັນກັບສອງຮູບແບບໄລຍະ ASCII ເທົ່ານັ້ນ.

ມີຄໍາສັບຄ້າຍຄືກັນອື່ນໆທີ່ສາມາດຖືກນໍາໃຊ້ນອກເຫນືອຈາກຊື່ທີ່ລະບຸໄວ້ໃນຕາຕະລາງ.
ຕົວຢ່າງ, "\p{PosixAlpha}" ສາມາດຂຽນເປັນ "\p{Alpha}". ທັງຫມົດແມ່ນໄດ້ລະບຸໄວ້ໃນ
"ຄຸນສົມບັດສາມາດເຂົ້າເຖິງໄດ້ຜ່ານ \p{} ແລະ \P{}" ໃນ perluniprops.

ທັງສອງຄູ່ "\p" ລ້ວນແຕ່ຖືວ່າກົດລະບຽບຂອງ Unicode ມີຜົນບັງຄັບໃຊ້. ໃນເວທີ ASCII,
ນີ້ຫມາຍຄວາມວ່າພວກເຂົາສົມມຸດວ່າຈຸດລະຫັດຈາກ 128 ຫາ 255 ແມ່ນ Latin-1, ແລະນັ້ນຫມາຍຄວາມວ່າ.
ການໃຊ້ພວກມັນພາຍໃຕ້ກົດລະບຽບຂອງທ້ອງຖິ່ນແມ່ນບໍ່ສະຫຼາດເວັ້ນເສຍແຕ່ວ່າທ້ອງຖິ່ນຈະຖືກຮັບປະກັນວ່າເປັນລາຕິນ-1
ຫຼື UTF-8. ໃນທາງກົງກັນຂ້າມ, ຫ້ອງຮຽນຕົວອັກສອນ POSIX ແມ່ນມີປະໂຫຍດພາຍໃຕ້ກົດລະບຽບທ້ອງຖິ່ນ. ເຂົາເຈົ້າ
ໄດ້ຮັບຜົນກະທົບຈາກກົດລະບຽບຕົວຈິງ, ດັ່ງຕໍ່ໄປນີ້:

ຖ້າຕົວແກ້ໄຂ "/a", ມີຜົນ ...
ແຕ່ລະຊັ້ນຮຽນ POSIX ກົງກັນແທ້ກັບລະດັບ ASCII ຂອງເຂົາເຈົ້າ.

ຖ້າບໍ່ດັ່ງນັ້ນ ...
ສໍາລັບຈຸດລະຫັດຂ້າງເທິງ 255 ...
ຫ້ອງຮຽນ POSIX ກົງກັນກັບຄູ່ເຕັມລະດັບຂອງມັນ.

ສໍາລັບຈຸດລະຫັດຂ້າງລຸ່ມນີ້ 256 ...
ຖ້າກົດລະບຽບທ້ອງຖິ່ນມີຜົນບັງຄັບໃຊ້ ...
ຫ້ອງຮຽນ POSIX ກົງກັນຕາມທ້ອງຖິ່ນ, ຍົກເວັ້ນ:

"ຄໍາ"
ຮວມເຖິງຕົວອັກສອນຂີດກ້ອງພື້ນເມືອງຂອງເວທີ, ບໍ່ວ່າຈະເປັນອັນໃດ
ທ້ອງຖິ່ນແມ່ນ.

"ອາຊີ"
ໃນເວທີທີ່ບໍ່ມີສ່ວນຂະຫຍາຍ POSIX "ascii", ນີ້ກົງກັນ
ພຽງແຕ່ຕົວອັກສອນລະດັບ ASCII ພື້ນເມືອງຂອງເວທີ.

"ເປົ່າ"
ໃນເວທີທີ່ບໍ່ມີສ່ວນຂະຫຍາຍ POSIX "ເປົ່າ", ນີ້ກົງກັນ
ພຽງແຕ່ແຖບຕົ້ນສະບັບຂອງເວທີແລະຕົວອັກສອນຊ່ອງ.

ຖ້າກົດລະບຽບຂອງ Unicode ມີຜົນບັງຄັບໃຊ້ ...
ຫ້ອງຮຽນ POSIX ກົງກັນກັບແບບເຕັມລະດັບ.

ຖ້າບໍ່ດັ່ງນັ້ນ ...
ຫ້ອງຮຽນ POSIX ກົງກັນກັບລະດັບ ASCII.

ກົດລະບຽບໃດທີ່ນໍາໃຊ້ແມ່ນຖືກກໍານົດຕາມທີ່ອະທິບາຍໄວ້ໃນ "ຕົວແກ້ໄຂຊຸດຕົວອັກສອນໃດຢູ່ໃນ
ຜົນກະທົບ?” ໃນ perlre.

ມັນໄດ້ຖືກສະເຫນີໃຫ້ມີການປ່ຽນແປງພຶດຕິກໍານີ້ໃນການປ່ອຍ Perl ໃນອະນາຄົດເພື່ອວ່າຈະເປັນຫຼືບໍ່
ກົດລະບຽບ Unicode ມີຜົນບັງຄັບໃຊ້ຈະບໍ່ປ່ຽນແປງພຶດຕິກໍາ: ຢູ່ນອກທ້ອງຖິ່ນ, POSIX
ຫ້ອງຮຽນຈະປະຕິບັດຄືກັບຄູ່ຮ່ວມລະດັບ ASCII ຂອງເຂົາເຈົ້າ. ຖ້າ​ຫາກ​ວ່າ​ທ່ານ​ຕ້ອງ​ການ​ຄໍາ​ຄິດ​ເຫັນ​ກ່ຽວ​ກັບ​ການ​ນີ້​
ການ​ສະ​ເຫນີ​, ສົ່ງ​ອີ​ເມວ​ຫາ "[email protected]".

ການປະຕິເສດຂອງຫ້ອງຮຽນຕົວອັກສອນ POSIX

ການຂະຫຍາຍ Perl ກັບຫ້ອງຮຽນຕົວອັກສອນ POSIX ແມ່ນຄວາມສາມາດໃນການປະຕິເສດມັນ. ນີ້ແມ່ນເຮັດໄດ້ໂດຍ
ການນຳໜ້າຊື່ຫ້ອງຮຽນດ້ວຍເຄື່ອງໝາຍ ("^"). ບາງຕົວຢ່າງ:

POSIX ASCII-range backslash ເຕັມໄລຍະ
Unicode Unicode ລຳດັບ
-------------------------------------------------- ---
[[:^digit:]] \P{PosixDigit} \P{XPosixDigit} \D
[[:^space:]] \P{PosixSpace} \P{XPosixSpace}
\P{PerlSpace} \P{XPerlSpace} \S
[[:^word:]] \P{PerlWord} \P{XPosixWord} \W

ລໍາດັບ backslash ສາມາດຫມາຍຄວາມວ່າ ASCII- ຫຼື Full-range Unicode, ຂຶ້ນກັບຄວາມຫຼາກຫຼາຍ
ປັດໄຈທີ່ອະທິບາຍໄວ້ໃນ "ຕົວແກ້ໄຂຊຸດຕົວອັກສອນໃດທີ່ມີຜົນກະທົບ?" ໃນ perlre.

[= =] ແລະ [. .]

Perl ຮັບຮູ້ຫ້ອງຮຽນຕົວອັກສອນ POSIX "[=class=]" ແລະ "[.class.]", ແຕ່ບໍ່ໄດ້.
(ຍັງ?) ສະຫນັບສະຫນູນເຂົາເຈົ້າ. ຄວາມພະຍາຍາມທີ່ຈະນໍາໃຊ້ການກໍ່ສ້າງໃດໆກໍ່ຍົກຂໍ້ຍົກເວັ້ນ.

ຕົວຢ່າງ

/[[:digit:]]/ # ກົງກັບຕົວອັກສອນທີ່ເປັນຕົວເລກ.
/[01[:lower:]]/ # ກົງກັບຕົວລະຄອນທີ່ເປັນ a
# ຕົວພິມນ້ອຍ, ຫຼື '0' ຫຼື '1'.
/[[:digit:][:^xdigit:]]/ # ກົງກັບຕົວອັກສອນທີ່ສາມາດເປັນອັນໃດກໍໄດ້
# ຍົກເວັ້ນຕົວອັກສອນ 'a' ເຖິງ 'f' ແລະ 'A' ເຖິງ
# 'F'. ນີ້ແມ່ນຍ້ອນວ່າລັກສະນະຕົ້ນຕໍ
# ຊັ້ນຮຽນແມ່ນປະກອບດ້ວຍສອງຕົວອັກສອນ POSIX
# ຫ້ອງຮຽນທີ່ ORed ຮ່ວມກັນ, ຫນຶ່ງໃນນັ້ນ
# ກົງກັບຕົວເລກໃດນຶ່ງ, ແລະອື່ນໆ
# ກົງກັບສິ່ງທີ່ບໍ່ແມ່ນຕົວເລກ hex.
# OR ເພີ່ມຕົວເລກ, ເຫຼືອພຽງແຕ່ຕົວເລກ
ບໍ່ລວມຕົວໜັງສື 'a' ຫາ 'f' ແລະ 'A' ຫາ 'F'.

ການຂະຫຍາຍ ວົງເລັບ ລັກສະນະ ຫ້ອງຮຽນ

ນີ້ແມ່ນປະເພດຕົວອັກສອນທີ່ມີວົງເລັບແບບແຟນຊີທີ່ສາມາດໃຊ້ເພື່ອໃຫ້ສາມາດອ່ານໄດ້ຫຼາຍຂຶ້ນ ແລະໜ້ອຍລົງ
ຫ້ອງຮຽນຜິດພາດ, ແລະປະຕິບັດການກໍານົດ, ເຊັ່ນ: ທາງແຍກ. ຕົວຢ່າງແມ່ນ

/(?[ \p{Thai} & \p{Digit} ])/

ອັນນີ້ຈະກົງກັບຕົວເລກທັງໝົດທີ່ຢູ່ໃນຕົວໜັງສືໄທ.

ນີ້​ແມ່ນ​ການ​ທົດ​ລອງ​ຄຸນ​ສົມ​ບັດ​ທີ່​ມີ​ຢູ່​ເລີ່ມ​ຕົ້ນ​ໃນ 5.18​, ແລະ​ມີ​ການ​ປ່ຽນ​ແປງ​ດັ່ງ​ທີ່​ພວກ​ເຮົາ​
ໄດ້ຮັບປະສົບການພາກສະຫນາມກັບມັນ. ຄວາມພະຍາຍາມໃດໆທີ່ຈະນໍາໃຊ້ມັນຈະເຕືອນໄພ, ເວັ້ນເສຍແຕ່
ຄົນພິການຜ່ານ

ບໍ່ມີຄໍາເຕືອນ "ທົດລອງ::regex_sets";

ຄໍາເຫັນກ່ຽວກັບຄຸນນະສົມບັດນີ້ແມ່ນຍິນດີຕ້ອນຮັບ; ສົ່ງອີເມວຫາ "[email protected]".

ພວກເຮົາສາມາດຂະຫຍາຍຕົວຢ່າງຂ້າງເທິງນີ້:

/(?[ ( \p{Thai} + \p{Lao} ) & \p{Digit} ])/

ອັນນີ້ກົງກັບຕົວເລກທີ່ເປັນຕົວໜັງສືໄທ ຫຼື ພາສາລາວ.

ສັງເກດເຫັນພື້ນທີ່ສີຂາວໃນຕົວຢ່າງເຫຼົ່ານີ້. ໂຄງສ້າງນີ້ມີຕົວແກ້ໄຂ "/x" ສະເໝີ
ເປີດຢູ່ໃນມັນ.

ຕົວປະຕິບັດການໄບນາຣີທີ່ມີຢູ່ແມ່ນ:

& ທາງຕັດ
+ ສະຫະພັນ
| ຊື່ອື່ນສໍາລັບ '+', ດັ່ງນັ້ນຫມາຍຄວາມວ່າສະຫະພາບ
- ການ​ລົບ (ຜົນ​ໄດ້​ຮັບ​ກົງ​ກັບ​ຊຸດ​ທີ່​ປະ​ກອບ​ດ້ວຍ​ເຫຼົ່າ​ນັ້ນ​
ຈຸດລະຫັດຖືກຈັບຄູ່ໂດຍຕົວປະຕິບັດການທໍາອິດ, ບໍ່ລວມເອົາອັນໃດນຶ່ງ
ຍັງຖືກຈັບຄູ່ໂດຍຕົວປະຕິບັດການທີສອງ)
^ ຄວາມ​ແຕກ​ຕ່າງ​ກັນ​ສົມ​ມາດ (ສະ​ຫະ​ພາບ​ລົບ​ທາງ​ຕັດ​ກັນ​)​. ນີ້
ແມ່ນຄ້າຍຄືສະເພາະຫຼື, ໃນນັ້ນຜົນໄດ້ຮັບແມ່ນຊຸດຂອງລະຫັດ
ຈຸດທີ່ຖືກຈັບຄູ່ໂດຍທັງສອງ, ແຕ່ບໍ່ແມ່ນທັງສອງ, ຂອງ
ໂຕປະຕິບັດການ.

ມີຕົວປະຕິບັດການ unary ຫນຶ່ງ:

! ເສີມ

ທັງ​ຫມົດ​ປະ​ຕິ​ບັດ​ການ​ຄູ່​ຮ່ວມ​ມື​; "&" ມີຄວາມສຳຄັນກວ່າອັນອື່ນ, ເຊິ່ງ
ທັງ​ຫມົດ​ມີ​ການ​ນໍາ​ຫນ້າ​ເທົ່າ​ທຽມ​ກັນ​. ຄູ່ຮ່ວມງານສິດທິຂອງຜູ້ປະຕິບັດການ unary, ແລະມີສູງສຸດ
ອັນດັບຕົ້ນ. ດັ່ງນັ້ນ, ອັນນີ້ປະຕິບັດຕາມກົດລະບຽບ Perl precedence ປົກກະຕິສໍາລັບຕົວປະຕິບັດການຢ່າງມີເຫດຜົນ.
ໃຊ້ວົງເລັບເພື່ອລົບລ້າງຄວາມສຳຄັນໃນຕອນຕົ້ນ ແລະ ການເຊື່ອມໂຍງ.

ຂໍ້ຈໍາກັດຕົ້ນຕໍແມ່ນວ່າທຸກສິ່ງທຸກຢ່າງແມ່ນ metacharacter. ດັ່ງນັ້ນ, ທ່ານບໍ່ສາມາດອ້າງເຖິງ
ຕົວອັກສອນດຽວໂດຍການເຮັດບາງສິ່ງບາງຢ່າງເຊັ່ນນີ້:

/(?[ a + b ])/ # Syntax ຜິດພາດ!

ວິທີທີ່ງ່າຍທີ່ສຸດທີ່ຈະລະບຸຕົວພິມຂອງແຕ່ລະຕົວພິມໄດ້ຄືການໃສ່ມັນໄວ້ໃນວົງເລັບ:

/(?[[a] + [b]])/

(ນີ້​ແມ່ນ​ສິ່ງ​ດຽວ​ກັນ​ກັບ "[ab]".) ເຈົ້າ​ຍັງ​ສາ​ມາດ​ເວົ້າ​ວ່າ​ທຽບ​ເທົ່າ​:

/(?[[ab ]])/

(ແນ່ນອນ, ທ່ານສາມາດລະບຸຕົວອັກສອນດຽວໄດ້ໂດຍການໃຊ້, "\x{...}", "\N{...}", ແລະອື່ນໆ.)

ຕົວຢ່າງສຸດທ້າຍນີ້ສະແດງໃຫ້ເຫັນການນໍາໃຊ້ການກໍ່ສ້າງນີ້ເພື່ອກໍານົດວົງເລັບທໍາມະດາ
ຫ້ອງຮຽນຕົວອັກສອນໂດຍບໍ່ມີການປະຕິບັດທີ່ກໍານົດໄວ້ເພີ່ມເຕີມ. ໃຫ້ສັງເກດພື້ນທີ່ສີຂາວພາຍໃນມັນ; "/x"
ແມ່ນເປີດຢູ່ແມ້ແຕ່ຢູ່ໃນຫ້ອງຮຽນຕົວອັກສອນໃນວົງເລັບ, ຍົກເວັ້ນທ່ານບໍ່ສາມາດມີຄຳເຫັນໄດ້
ພາຍໃນພວກເຂົາ. ດັ່ງນັ້ນ,

(?[ [#] ])

ກົງກັບຕົວອັກສອນ "#". ເພື່ອລະບຸຕົວອັກສອນຊ່ອງສີຂາວຕົວໜັງສື, ທ່ານສາມາດເຮັດໄດ້
ໜີມັນດ້ວຍ backslash ເຊັ່ນ:

/(?[ [ aeiou \ ]])/

ອັນນີ້ກົງກັບພະຍັນຊະນະພາສາອັງກິດບວກກັບຕົວອັກສອນ SPACE. ການຫລົບຫນີອື່ນໆທັງຫມົດຍອມຮັບ
ໂດຍຫ້ອງຮຽນຕົວອັກສອນວົງເລັບປົກກະຕິໄດ້ຖືກຍອມຮັບຢູ່ທີ່ນີ້ເຊັ່ນດຽວກັນ; ແຕ່ການຫລົບຫນີທີ່ບໍ່ຮູ້ຈັກ
ທີ່ສ້າງການເຕືອນໄພໃນຫ້ອງຮຽນປົກກະຕິແມ່ນຄວາມຜິດພາດທີ່ຮ້າຍແຮງຢູ່ທີ່ນີ້.

ການເຕືອນໄພທັງໝົດຈາກອົງປະກອບຂອງຫ້ອງຮຽນເຫຼົ່ານີ້ແມ່ນເປັນອັນຕະລາຍເຖິງຕາຍ, ເຊັ່ນດຽວກັນກັບການປະຕິບັດບາງຢ່າງທີ່ບໍ່ເຮັດ
ເຕືອນໃນປັດຈຸບັນ. ຕົວຢ່າງທ່ານບໍ່ສາມາດເວົ້າໄດ້

/(?[ [ \xF ] ])/ # syntax ຜິດພາດ!

ທ່ານຕ້ອງມີຕົວເລກ hex ສອງຕົວເລກຫຼັງຈາກ "\x" ແບບບໍ່ມີສາຍແຂນ (ໃຊ້ເລກສູນເພື່ອເຮັດສອງ).
ຂໍ້ຈໍາກັດເຫຼົ່ານີ້ແມ່ນເພື່ອຫຼຸດອັດຕາການພິມຜິດເຊິ່ງເຮັດໃຫ້ຫ້ອງຮຽນບໍ່ກົງກັບສິ່ງທີ່
ເຈົ້າຄິດວ່າມັນຈະ.

ຖ້າຫ້ອງຮຽນຕົວອັກສອນວົງເລັບປົກກະຕິມີ "\p{}" ຫຼື "\P{}" ແລະຖືກຈັບຄູ່ກັບ
ຈຸດລະຫັດທີ່ບໍ່ແມ່ນ Unicode, ການເຕືອນໄພອາດຈະຖືກຍົກຂຶ້ນມາ, ເພາະວ່າຜົນໄດ້ຮັບບໍ່ໄດ້ຖືກກໍານົດໂດຍ Unicode.
ບໍ່ມີຄໍາເຕືອນດັ່ງກ່າວຈະມາໃນເວລາທີ່ການນໍາໃຊ້ແບບຟອມຂະຫຍາຍນີ້.

ຄວາມແຕກຕ່າງສຸດທ້າຍລະຫວ່າງຫ້ອງຮຽນຕົວອັກສອນແບບວົງເລັບປົກກະຕິແລະການເຫຼົ່ານີ້, ແມ່ນວ່າມັນແມ່ນ
ບໍ່ສາມາດເອົາສິ່ງເຫຼົ່ານີ້ໃຫ້ກົງກັບຫຼາຍຕົວໜັງສື. ດັ່ງນັ້ນ,

/(?[ [\xDF] ])/iu

ບໍ່ກົງກັບສະຕຣິງ "ss".

ທ່ານບໍ່ ຈຳ ເປັນຕ້ອງປິດຊື່ຫ້ອງຮຽນ POSIX ຢູ່ໃນວົງເລັບຄູ່, ເພາະສະນັ້ນທັງສອງ
ວຽກຕໍ່ໄປນີ້:

/(?[ [:word:] - [:lower:]])/
/(?[ [[:word:]] - [[:lower:]]])/

ຫ້ອງຮຽນຕົວອັກສອນ POSIX ໃດໆກໍຕາມ, ລວມທັງສິ່ງຕ່າງໆເຊັ່ນ "\w" ແລະ "\D" ເຄົາລົບ
ຕົວປັບປ່ຽນ "/a" (ແລະ "/aa").

"(?[ ])" ແມ່ນໂຄງສ້າງ regex-compile-time. ຄວາມພະຍາຍາມໃດໆທີ່ຈະນໍາໃຊ້ບາງສິ່ງບາງຢ່າງທີ່ບໍ່ແມ່ນ
ຮູ້ໄດ້ໃນເວລາທີ່ມີການລວບລວມການສະແດງອອກປົກກະຕິແມ່ນຄວາມຜິດພາດທີ່ຮ້າຍແຮງ. ໃນ
ການປະຕິບັດ, ນີ້ຫມາຍຄວາມວ່າພຽງແຕ່ສາມຂໍ້ຈໍາກັດ:

1. ໂຄງສ້າງນີ້ບໍ່ສາມາດຖືກໃຊ້ໃນຂອບເຂດຂອງ "use locale" (ຫຼື "/l" regex.
ຕົວແກ້ໄຂ).

2. ຄຸນສົມບັດທີ່ຜູ້ໃຊ້ກຳນົດເອງໃຊ້ຈະຕ້ອງຖືກກຳນົດແລ້ວໂດຍເວລາປົກກະຕິ
ການສະແດງອອກແມ່ນລວບລວມ (ແຕ່ສັງເກດວ່າການກໍ່ສ້າງນີ້ສາມາດຖືກນໍາໃຊ້ແທນເຊັ່ນ
ຄຸນສົມບັດ).

3. ການສະແດງອອກປົກກະຕິທີ່ຖ້າບໍ່ດັ່ງນັ້ນຈະລວບລວມໂດຍໃຊ້ກົດລະບຽບ "/d", ແລະທີ່ໃຊ້
ໂຄງສ້າງນີ້ຈະໃຊ້ "/u". ດັ່ງນັ້ນການກໍ່ສ້າງນີ້ບອກ Perl ວ່າເຈົ້າບໍ່ເຮັດ
ຕ້ອງການ "/d" ກົດລະບຽບສໍາລັບການສະແດງອອກປົກກະຕິທັງຫມົດທີ່ມີມັນ.

ໃຫ້ສັງເກດວ່າການຂ້າມພື້ນທີ່ສີຂາວໃຊ້ກັບພາຍໃນຂອງການກໍ່ສ້າງນີ້ເທົ່ານັ້ນ. ຕ້ອງມີ
ບໍ່ມີຊ່ອງຫວ່າງລະຫວ່າງຕົວອັກສອນໃດນຶ່ງທີ່ປະກອບເປັນ "(?[").
be space between the ປິດ "])" ຕົວອັກສອນ.

ຄືກັນກັບການສະແດງອອກປົກກະຕິທັງໝົດ, ຮູບແບບສາມາດສ້າງຂຶ້ນໄດ້ໂດຍການລວມເອົາຕົວແປຕ່າງໆ
ທີ່ຖືກ interpolated ໃນເວລາລວບລວມ regex. ການດູແລຕ້ອງໄດ້ຮັບການປະຕິບັດເພື່ອຮັບປະກັນວ່າທ່ານ
ໄດ້ຮັບສິ່ງທີ່ທ່ານຄາດຫວັງ. ຍົກ​ຕົວ​ຢ່າງ:

my $thai_or_lao = '\p{Thai} + \p{Lao}';
...
qr/(?[ \p{Digit} & $thai_or_lao ])/;

ລວບລວມກັບ

qr/(?[ \p{Digit} & \p{Thai} + \p{Lao} ])/;

ແຕ່ນີ້ບໍ່ມີຜົນກະທົບທີ່ຄົນທີ່ອ່ານລະຫັດອາດຈະຄາດຫວັງ, ດັ່ງທີ່
ທາງແຍກໃຊ້ກັບ "\p{Thai}", ຍົກເວັ້ນພາສາລາວ. ຂຸມ​ເຊັ່ນ​ນີ້​
ສາ​ມາດ​ຫຼີກ​ເວັ້ນ​ໄດ້​ໂດຍ​ການ​ວົງ​ເລັບ​ຕ່ອນ​ອົງ​ປະ​ກອບ​:

my $thai_or_lao = '( \p{Thai} + \p{Lao} )';

ແຕ່ຕົວແກ້ໄຂໃດໆຈະຍັງຄົງໃຊ້ກັບອົງປະກອບທັງໝົດ:

ຂອງຂ້ອຍ $lower = '\p{Lower} + \p{Digit}';
qr/(?[ \p{Greek} & $lower ])/i;

ກົງກັບສິ່ງຂອງຕົວພິມໃຫຍ່. ທ່ານສາມາດຫຼີກເວັ້ນການແປກໃຈໂດຍການເຮັດໃຫ້ອົງປະກອບເຂົ້າໄປໃນ
ຕົວຢ່າງຂອງໂຄງສ້າງນີ້ໂດຍການລວບລວມພວກມັນ:

my $thai_or_lao = qr/(?[ \p{Thai} + \p{Lao} ])/;
ຂອງຂ້ອຍ $lower = qr/(?[ \p{Lower} + \p{Digit} ])/;

ເມື່ອສິ່ງເຫຼົ່ານີ້ຖືກຝັງຢູ່ໃນຮູບແບບອື່ນ, ສິ່ງທີ່ພວກເຂົາກົງກັນບໍ່ປ່ຽນແປງ, ບໍ່ວ່າຈະເປັນ
ວົງເລັບຫຼືຕົວດັດແປງໃດທີ່ມີຜົນກະທົບໃນຮູບແບບນອກນັ້ນ.

ເນື່ອງຈາກວິທີທີ່ Perl parses ສິ່ງຕ່າງໆ, ວົງເລັບແລະວົງເລັບຂອງທ່ານອາດຈະຕ້ອງການ
ມີຄວາມສົມດູນ, ເຖິງແມ່ນວ່າລວມທັງຄໍາເຫັນ. ຖ້າທ່ານແລ່ນເຂົ້າໄປໃນຕົວຢ່າງໃດໆ, ກະລຸນາສົ່ງພວກເຂົາໄປຫາ
"[email protected]", ດັ່ງນັ້ນພວກເຮົາສາມາດມີຕົວຢ່າງທີ່ຊັດເຈນສໍາລັບຫນ້າຜູ້ຊາຍນີ້.

ພວກເຮົາອາດຈະປ່ຽນແປງມັນເພື່ອໃຫ້ສິ່ງທີ່ຍັງຄົງໃຊ້ທາງດ້ານກົດຫມາຍຢູ່ໃນລັກສະນະວົງເລັບປົກກະຕິ
ຫ້ອງຮຽນອາດຈະຜິດກົດໝາຍພາຍໃນການກໍ່ສ້າງທົດລອງນີ້. ຂໍ້ສະເຫນີຫນຶ່ງ, ສໍາລັບ
ຍົກ​ຕົວ​ຢ່າງ​, ແມ່ນ​ການ​ຫ້າມ​ການ​ນໍາ​ໃຊ້​ທີ່​ຢູ່​ໃກ້​ຄຽງ​ຂອງ​ລັກ​ສະ​ນະ​ດຽວ​ກັນ​, ເຊັ່ນ​ດຽວ​ກັນ​ກັບ "(?[ [aa​]​]​)​"​. ໄດ້
ແຮງຈູງໃຈສໍາລັບການປ່ຽນແປງດັ່ງກ່າວແມ່ນວ່າການນໍາໃຊ້ນີ້ອາດຈະເປັນການພິມຜິດ, ດັ່ງທີ່ "a" ທີສອງເພີ່ມ
ບໍ່ມີຫຍັງ.

ໃຊ້ perlrecharclass ອອນໄລນ໌ໂດຍໃຊ້ບໍລິການ onworks.net


ເຊີບເວີ ແລະສະຖານີເຮັດວຽກຟຣີ

ດາວໂຫຼດແອັບ Windows ແລະ Linux

  • 1
    libjpeg-turbo
    libjpeg-turbo
    libjpeg-turbo ເປັນຕົວແປງສັນຍານຮູບພາບ JPEG
    ທີ່ໃຊ້ຄໍາແນະນໍາ SIMD (MMX, SSE2,
    NEON, AltiVec) ເພື່ອເລັ່ງພື້ນຖານ
    ເປີດການບີບອັດ JPEG ແລະ decompression
    x86,x8...
    ດາວໂຫລດ libjpeg-turbo
  • 2
    ຜູ້ຈັດການດາວໂຫລດ Xtreme
    ຜູ້ຈັດການດາວໂຫລດ Xtreme
    ໂຄງການມີເຮືອນໃຫມ່ໃນປັດຈຸບັນ:
    https://xtremedownloadmanager.com/ For
    ນັກພັດທະນາ:
    https://github.com/subhra74/xdm Xtreme
    Download Manager ເປັນ​ເຄື່ອງ​ມື​ທີ່​ມີ​ອໍາ​ນາດ t ...
    ດາວໂຫລດ Xtreme Download Manager
  • 3
    TTGO VGA32 Lite
    TTGO VGA32 Lite
    ຄຸນນະສົມບັດ: 4:3 ແລະ 16:9 ຄວາມລະອຽດຕ່ໍາ
    VGA outputPS/2 keyboard ແລະຫນູ
    ສ່ວນຕິດຕໍ່ຜູ້ໃຊ້ທີ່ອີງໃສ່ຂໍ້ຄວາມ input (TUI)
    ກັບ dialog managerPartial Unicode
    ສະ​ຫນັບ​ສະ​ຫນູນ​ຂ້າ​ໃຊ້ ...
    ດາວໂຫລດ TTGO VGA32 Lite
  • 4
    Clover EFI bootloader
    Clover EFI bootloader
    ໂຄງການໄດ້ຍ້າຍໄປ
    https://github.com/CloverHackyColor/CloverBootloader..
    ຄຸນສົມບັດ: ເປີດ macOS, Windows, ແລະ Linux
    ໃນ UEFI ຫຼືຮູບແບບ legacy ໃນ Mac ຫຼື PC ກັບ
    ຢູ...
    ດາວໂຫລດ Clover EFI bootloader
  • 5
    unitedrpms
    unitedrpms
    ເຂົ້າຮ່ວມກັບພວກເຮົາໃນ Gitter!
    https://gitter.im/unitedrpms-people/Lobby
    ເປີດໃຊ້ URPMS repository ໃນຂອງທ່ານ
    ລະບົບ -
    https://github.com/UnitedRPMs/unitedrpms.github.io/bl...
    ດາວໂຫລດ unitedrpms
  • 6
    ເພີ່ມຫ້ອງສະCຸດ C ++
    ເພີ່ມຫ້ອງສະCຸດ C ++
    Boost ສະຫນອງການ Portable ຟຣີ
    ຫ້ອງສະໝຸດ C++ ທີ່ໄດ້ທົບທວນຄືນໂດຍໝູ່. ໄດ້
    ເນັ້ນໜັກໃສ່ຫ້ອງສະໝຸດແບບເຄື່ອນທີ່
    ເຮັດວຽກໄດ້ດີກັບຫ້ອງສະຫມຸດມາດຕະຖານ C ++.
    ເບິ່ງ http://www.bo...
    ດາວໂຫລດ Boost C++ Libraries
  • ເພີ່ມເຕີມ »

Linux ຄຳ ສັ່ງ

Ad