انگلیسیفرانسویاسپانیایی

فاویکون OnWorks

perlrecharclass - آنلاین در ابر

اجرای perlrecharclass در ارائه دهنده هاست رایگان OnWorks از طریق Ubuntu Online، Fedora Online، شبیه ساز آنلاین ویندوز یا شبیه ساز آنلاین MAC OS

این دستور perlrecharclass است که می تواند در ارائه دهنده هاست رایگان OnWorks با استفاده از یکی از چندین ایستگاه کاری آنلاین رایگان ما مانند Ubuntu Online، Fedora Online، شبیه ساز آنلاین ویندوز یا شبیه ساز آنلاین MAC OS اجرا شود.

برنامه:

نام


perlrecharclass - کلاس های کاراکتر بیان منظم پرل

شرح


اسناد سطح بالا در مورد عبارات منظم Perl در perlre یافت می شود.

این صفحه راهنما در مورد نحو و استفاده از کلاس های کاراکتر در پرل معمولی بحث می کند
اصطلاحات.

کلاس کاراکتر راهی است برای نشان دادن مجموعه ای از کاراکترها به گونه ای که یک
شخصیت مجموعه مطابقت دارد. مهم است که به یاد داشته باشید: تطبیق یک شخصیت
کلاس دقیقاً یک کاراکتر در رشته منبع مصرف می کند. (رشته منبع عبارت است از
رشته عبارت منظم با آن مطابقت دارد.)

سه نوع کلاس کاراکتر در عبارات منظم پرل وجود دارد: نقطه، بک اسلش
دنباله ها، و فرم محصور در پرانتز مربع. با این حال، به خاطر داشته باشید که اغلب
اصطلاح "کلاس کاراکتر" فقط به معنای شکل پرانتزی استفاده می شود. مطمئنا، بیشتر پرل
اسناد این کار را انجام می دهد.

La نقطه
نقطه (یا نقطه)، "." احتمالاً پر استفاده ترین و مطمئناً شناخته شده ترین است
کلاس شخصیت به‌طور پیش‌فرض، یک نقطه با هر کاراکتری به‌جز خط جدید مطابقت دارد. که
پیش‌فرض را می‌توان برای افزودن تطبیق خط جدید با استفاده از علامت تغییر داد تنها خط اصلاح کننده:
یا برای کل عبارت منظم با اصلاح کننده "/s" یا به صورت محلی با "(?s)".
(توالی بک اسلش "\N" که در زیر توضیح داده شده است، با هر کاراکتری به جز خط جدید مطابقت دارد
بدون توجه به تنها خط اصلاح کننده.)

در اینجا برخی از نمونه ها:

"الف" =~ /./ # همخوانی داشتن
"." =~ /./ # همخوانی داشتن
"" =~ /./ # بدون تطابق (نقطه باید با یک کاراکتر مطابقت داشته باشد)
"\n" =~ /./ # مطابقت ندارد (نقطه با خط جدید مطابقت ندارد)
"\n" =~ /./s # Match (تغییرگر جهانی "تک خط")
"\n" =~ /(?s:.)/ # تطبیق (تغییرکننده محلی "تک خط")
"ab" =~ /^.$/ # مطابقت ندارد (نقطه با یک کاراکتر مطابقت دارد)

بک گراند توالی
سکانس بک اسلش دنباله ای از کاراکترها است که اولین آن ها بک اسلش است.
پرل به بسیاری از این سکانس ها معنای خاصی نسبت می دهد و برخی از آنها شخصیت هستند
کلاس ها. یعنی هر کدام با یک کاراکتر منطبق می شوند، مشروط بر اینکه شخصیت متعلق به آن باشد
به مجموعه خاصی از کاراکترهای تعریف شده توسط دنباله.

در اینجا لیستی از دنباله‌های بک اسلش که کلاس‌های کاراکتر هستند، آمده است. مورد بحث قرار می گیرند
با جزئیات بیشتر در زیر (برای دنباله های بک اسلش که کلاس شخصیت نیستند، ببینید
perlrebackslash.)

\d یک کاراکتر رقم اعشاری را مطابقت دهید.
\D یک کاراکتر غیر اعشاری را مطابقت دهید.
\w یک کاراکتر "کلمه" را مطابقت دهید.
\W با یک کاراکتر غیر "کلمه" مطابقت دهید.
\s یک کاراکتر فضای خالی را مطابقت دهید.
\S با یک کاراکتر بدون فضای سفید مطابقت دهید.
\h یک کاراکتر فضای سفید افقی را مطابقت دهید.
\H کاراکتری را مطابقت دهید که فضای سفید افقی نیست.
\v یک کاراکتر فضای سفید عمودی را مطابقت دهید.
\V کاراکتری را مطابقت دهید که فضای سفید عمودی نیست.
\N نویسه‌ای را که خط جدید نیست مطابقت دهید.
\pP, \p{Prop} کاراکتری را که دارای ویژگی یونیکد است مطابقت دهید.
\PP, \P{Prop} کاراکتری را که دارای ویژگی یونیکد نیست مطابقت دهید

\N

"\N" که از نسخه 5.12 شروع می شود، مانند نقطه، با هر نویسه ای که a نیست مطابقت دارد
خط جدید. تفاوت این است که "\N" تحت تأثیر تنها خط منظم
اصلاح کننده بیان (به "نقطه" در بالا مراجعه کنید). توجه داشته باشید که شکل "\N{...}" ممکن است به معنای باشد
چیزی کاملا متفاوت وقتی "{...}" یک کمیت باشد، به معنای مطابقت با a است
کاراکتر غیر خط جدید که چندین بار. برای مثال، "\N{3}" به معنای مطابقت دادن 3 غیر
خطوط جدید؛ "\N{5،}" به معنای مطابقت با 5 یا چند خط غیرجدید است. اما اگر «{...}» قانونی نباشد
کمیت، فرض می شود که یک کاراکتر با نام است. برای آن نام‌ها را ببینید. برای
به عنوان مثال، هیچ یک از "\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 است
استاندارد است، اما پرل در حال حاضر چیزی در این مورد فرض نمی کند.)

این بدان معنی است که مگر اینکه اصلاح کننده "/a" در اثر باشد، "\d" نه تنها با آن مطابقت دارد
ارقام '0' - '9'، اما همچنین عربی، دوانگاری، و ارقام از زبان های دیگر. این ممکن است
باعث سردرگمی و برخی مشکلات امنیتی شود.

برخی از ارقام که "\d" مطابقت دارند، شبیه برخی از ارقام [0-9] هستند، اما مقادیر متفاوتی دارند.
برای مثال، BENGALI DIGIT FOUR (U+09EA) بسیار شبیه ASCII DIGIT EIGHT است.
(U+0038). برنامه‌ای که فقط انتظار ارقام ASCII را دارد ممکن است گمراه شود، یا اگر
مطابقت "\d+" است، رشته منطبق ممکن است حاوی ترکیبی از ارقام مختلف باشد
سیستم‌های نوشتاری که به نظر می‌رسد نشانگر عددی متفاوت از آنچه واقعاً هستند هستند.
"num()" در یونیکد::UCD می تواند برای محاسبه ایمن مقدار استفاده شود، اگر "undef" را برگرداند
رشته ورودی حاوی چنین مخلوطی است.

معنی "\p{Digit}" (و از این رو "\d" به جز تحت اصلاح کننده "/a") است.
"\p{General_Category=Decimal_Number}"، یا مترادف، "\p{General_Category=Digit}".
با شروع نسخه 4.1 یونیکد، این همان مجموعه کاراکترهایی است که با آن مطابقت دارند
"\p{Numeric_Type=Decimal}". اما یونیکد دارای یک ویژگی متفاوت با ویژگی مشابه است
نام، "\p{Numeric_Type=Digit}"، که با مجموعه کاملا متفاوتی از کاراکترها مطابقت دارد.
این کاراکترها چیزهایی مانند "CIRCLED DIGIT ONE" یا زیرنویس ها هستند یا از نوشتن هستند
سیستم هایی که فاقد هر ده رقم هستند.

هدف طراحی این است که "\d" دقیقاً با مجموعه کاراکترهایی که می توانند با خیال راحت باشند مطابقت داشته باشد
با نحو اعشاری موقعیتی «عادی»، که برای مثال 123 به معنای یک است، استفاده می شود
"صد"، به اضافه دو "ده"، به علاوه سه "یک". این نماد موقعیتی اینطور نیست
لزوماً برای کاراکترهایی اعمال می شود که با نوع دیگر "رقم" مطابقت دارند،
"\p{Numeric_Type=Digit}"، و بنابراین "\d" با آنها مطابقت ندارد.

ارقام تامیل (U+0BE6 - U+0BEF) همچنین می توانند به طور قانونی در اعداد تامیل به سبک قدیمی در
که آنها بیش از یک در یک ردیف به نظر نمی رسند و با نویسه هایی که معنی دارند از هم جدا می شوند
"بار 10"، "بار 100"، و غیره (نگاه کنید بهhttp://www.unicode.org/notes/tn21>.)

هر کاراکتری که با "\d" مطابقت نداشته باشد، با "\D" مطابقت داده می شود.

کلمه کاراکتر

یک "\w" با یک نویسه الفبایی (یک نویسه الفبایی یا اعشاری) مطابقت دارد
رقم)؛ یا یک نویسه نقطه گذاری مرتبط، مانند یک خط زیر ("_")؛ یا یک "علامت"
شخصیت (مثل نوعی لهجه) که به یکی از آن‌ها متصل می‌شود. با a مطابقت ندارد
کل کلمه برای مطابقت با یک کلمه کامل، از "\w+" استفاده کنید. این چیزی شبیه به تطبیق نیست
کلمه انگلیسی، اما در محدوده ASCII همان رشته ای از شناسه Perl است
کاراکتر باشد.

اگر اصلاح کننده "/a" در کار باشد ...
"\w" با 63 نویسه [a-zA-Z0-9_] مطابقت دارد.

در غیر این صورت ...
برای نقاط کد بالای 255 ...
"\w" با "\p{Word}" در این محدوده مطابقت دارد. یعنی مطابقت دارد
حروف تایلندی، حروف یونانی، و غیره. این شامل نشانه گذاری رابط (مانند
خط زیر) که دو کلمه را به هم متصل می کند، یا نشانه هایی مانند "ترکیب
TILDE" و حروف اصلاح کننده که عموماً برای افزودن حروف کمکی استفاده می شوند
علامت گذاری به حروف

برای کدهای زیر 256 ...
اگر قوانین محلی اعمال شوند ...
"\w" با نویسه زیرخط بومی پلتفرم به اضافه هر چیزی مطابقت دارد
محلی را حروف عددی در نظر می گیرد.

اگر قوانین یونیکد اجرا شود ...
"\w" دقیقاً با آنچه "\p{Word}" مطابقت دارد مطابقت دارد.

در غیر این صورت ...
"\w" با [a-zA-Z0-9_] مطابقت دارد.

اینکه کدام قواعد اعمال می‌شود، همانطور که در «مدیفایر مجموعه کاراکترها در کدام است.» توضیح داده شده است
اثر؟" در پرلر.

تعدادی از مشکلات امنیتی در لیست کامل یونیکد از کاراکترهای کلمه وجود دارد. دیدن
<http://unicode.org/reports/tr36>.

همچنین، برای مجموعه ای از کاراکترهای با دانه بندی ریزتر که در زبان برنامه نویسی هستند
شناسه های فراتر از محدوده ASCII، ممکن است بخواهید در عوض از شناسه های سفارشی تر استفاده کنید
«ویژگی‌های یونیکد»، «\p{ID_Start}»، «\p{ID_Continue}»، «\p{XID_Start}»، و
"\p{XID_Continue}". دیدنhttp://unicode.org/reports/tr31>.

هر کاراکتری که با "\w" مطابقت نداشته باشد با "\W" مطابقت داده می شود.

فضای سفید

"\s" با هر کاراکتری که فضای خالی در نظر گرفته می شود مطابقت دارد.

اگر اصلاح کننده "/a" در کار باشد ...
در تمام نسخه های پرل، "\s" با 5 کاراکتر [\t\n\f\r ] مطابقت دارد. یعنی
زبانه افقی، خط جدید، فید فرم، بازگشت کالسکه و فاصله.
با شروع نسخه 5.18 Perl، با تب عمودی "\cK" نیز مطابقت دارد. به یادداشت "[1]" در زیر مراجعه کنید
برای بحث در این مورد

در غیر این صورت ...
برای نقاط کد بالای 255 ...
"\s" دقیقاً با نقاط کد بالای 255 که با ستون "s" در نشان داده شده است مطابقت دارد
جدول زیر

برای کدهای زیر 256 ...
اگر قوانین محلی اعمال شوند ...
"\s" با هر چیزی که منطقه محلی به عنوان فضای خالی در نظر می گیرد مطابقت دارد.

اگر قوانین یونیکد اجرا شود ...
"\s" دقیقاً با کاراکترهای نشان داده شده با ستون "s" در جدول مطابقت دارد
زیر کلیک کنید.

در غیر این صورت ...
"\s" با [\t\n\f\r ] و با شروع در Perl نسخه 5.18، تب عمودی، "\cK" مطابقت دارد.
(برای بحث در این مورد به یادداشت "[1]" زیر مراجعه کنید.) توجه داشته باشید که این لیست اینطور نیست
شامل فضای بدون شکستن.

اینکه کدام قواعد اعمال می‌شود، همانطور که در «مدیفایر مجموعه کاراکترها در کدام است.» توضیح داده شده است
اثر؟" در پرلر.

هر کاراکتری که با "\s" مطابقت نداشته باشد با "\S" مطابقت داده می شود.

"\h" با هر کاراکتری که فضای سفید افقی در نظر گرفته می شود مطابقت دارد. این شامل پلت فرم است
کاراکترهای space و tab و چندین کاراکتر دیگر که در جدول زیر فهرست شده اند. "\H" با هر کدام مطابقت دارد
نویسه فضای سفید افقی در نظر گرفته نمی شود. آنها از شخصیت بومی پلتفرم استفاده می کنند
تنظیم کنید، و هیچ محلی را که ممکن است در غیر این صورت مورد استفاده قرار گیرد در نظر نگیرید.

"\v" با هر کاراکتری که فضای سفید عمودی در نظر گرفته می شود مطابقت دارد. این شامل پلت فرم است
کاراکترهای بازگشت کالسکه و تغذیه خط (خط جدید) به اضافه چندین کاراکتر دیگر، همه
در جدول زیر فهرست شده است. "\V" با هر کاراکتری که فضای سفید عمودی در نظر گرفته نشده است مطابقت دارد.
آنها از مجموعه کاراکترهای بومی پلتفرم استفاده می کنند و هیچ محلی را که ممکن است در نظر نمی گیرند
در غیر این صورت در حال استفاده باشد

"\R" مطابق با هر چیزی است که می توان آن را به عنوان یک خط جدید تحت قوانین یونیکد در نظر گرفت. می تواند با a مطابقت داشته باشد
دنباله چند شخصیتی نمی توان از آن در کلاس کاراکترهای پرانتزی استفاده کرد. از "\v" استفاده کنید
در عوض (فضای سفید عمودی). از مجموعه کاراکترهای بومی پلتفرم استفاده می کند و این کار را نمی کند
هر محلی که ممکن است در غیر این صورت مورد استفاده باشد را در نظر بگیرید. جزئیات در مورد بحث قرار گرفته است
perlrebackslash.

توجه داشته باشید که برخلاف "\s" (و "\d" و "\w")، "\h" و "\v" همیشه با کاراکترهای مشابهی مطابقت دارند.
بدون در نظر گرفتن سایر عوامل، مانند محلی فعال یا اینکه آیا رشته منبع است
با فرمت UTF-8

ممکن است کسی فکر کند که "\s" معادل "[\h\v] است". این در واقع درست است که در Perl شروع می شود
نسخه 5.18، اما قبل از آن، تنها تفاوت این بود که زبانه عمودی ("\cK") نبود
مطابق با "\s".

جدول زیر فهرست کاملی از کاراکترهایی است که با "\s"، "\h" و "\v" مطابقت دارند.
از یونیکد 6.3.

ستون اول نقطه کد یونیکد کاراکتر (در فرمت هگز) را می دهد، ستون دوم
ستون نام (یونیکد) را می دهد. ستون سوم نشان می دهد که توسط کدام کلاس(های)
کاراکتر مطابقت دارد (با فرض اینکه هیچ محلی وجود نداشته باشد که تطابق "\s" را تغییر دهد).

0x0009 جدول نویسه hs
0x000a LINE FEED (LF) در مقابل
0x000b LINE TABULATION در مقابل [1]
0x000c FORM FEED (FF) در مقابل
0x000d CARRIAGE RETURN (CR) در مقابل
0x0020 SPACE hs
0x0085 خط بعدی (NEL) در مقابل [2]
0x00a0 فضای بدون وقفه hs [2]
0x1680 OGHAM SPACE MARK hs
0x2000 EN QUAD hs
0x2001 EM QUAD hs
0x2002 EN SPACE hs
0x2003 EM SPACE hs
0x2004 THREE-PER-EM SPACE hs
0x2005 FOUR-PER-EM SPACE hs
0x2006 SIX-PER-EM SPACE hs
0x2007 FIGURE SPACE hs
0x2008 فضای نقطه گذاری hs
0x2009 فضای نازک hs
0x200a HAIR SPACE hs
0x2028 LINE SEPARATOR در مقابل
0x2029 PARATOR SEPARATOR در مقابل
0x202f فضای باریک بدون وقفه hs
0x205f فضای متوسط ​​ریاضی hs
0x3000 فضای ایدئوگرافیک hs

[1] قبل از نسخه 5.18 Perl، "\s" با برگه عمودی مطابقت نداشت. "[^\S\cK]" (به طور مبهم)
با آنچه "\s" به طور سنتی انجام می داد مطابقت دارد.

[2] NEXT LINE و NO-BREAK SPACE ممکن است با "\s" مطابقت داشته باشند یا نباشند بسته به قوانین موجود در
اثر ابتدای این بخش را ببینید.

یونیکد خواص

"\pP" و "\p{Prop}" کلاس‌های کاراکتری برای مطابقت با کاراکترهایی هستند که با یونیکد مطابقت دارند.
خواص نام ویژگی های یک حرفی را می توان در فرم "\pP" با ویژگی استفاده کرد
نام زیر "\p" باشد، در غیر این صورت، مهاربندها لازم است. هنگام استفاده از بریس، یک وجود دارد
یک فرم که فقط نام ویژگی محصور در مهاربندها و یک فرم مرکب است
که شبیه "\p{name=value}" است، که به معنای مطابقت با ویژگی "name" برای the
شخصیت آن «ارزش» خاص را دارد. به عنوان مثال، می توان یک تطبیق برای یک عدد نوشت
به صورت «/\pN/» یا «/\p{Number}/»، یا به صورت «/\p{Number=True}/». حروف کوچک مطابقت دارند
توسط ملک حروف کوچک که شکل کوتاه دارد Ll. آنها به بریس نیاز دارند، همینطور هستند
نوشته شده به صورت "/\p{Ll}/" یا "/\p{حروف_کوچک}/"، یا
"/\p{General_Category=حروف_کوچک}/" (زیرخط اختیاری است). "/\pLl/" است
معتبر است، اما به معنای چیزی متفاوت است. با یک رشته دو کاراکتری مطابقت دارد: یک حرف
(ویژگی یونیکد "\pL")، به دنبال آن یک "l" کوچک است.

اگر قوانین محلی در کار نباشد، استفاده از یک ویژگی یونیکد، منظم را مجبور می کند
بیان را برای استفاده از قوانین یونیکد، در صورتی که قبلاً وجود نداشته است.

توجه داشته باشید که تقریباً همه خواص در برابر تطبیق غیر حساس به حروف مصون هستند. یعنی اضافه کردن
یک اصلاح کننده عبارت منظم "/i" چیزی را که مطابقت دارد تغییر نمی دهد. دو مجموعه وجود دارد
که تحت تاثیر قرار می گیرند. مجموعه اول "حروف_بزرگ"، "حروف_کوچک" و
"Titlecase_Letter" که همه آنها با "Cased_Letter" در تطابق "/i" مطابقت دارند. مجموعه دوم
"بزرگ"، "کوچک" و "Titleccase" است، که همه آنها با "حروف" در زیر "/i" مطابقت دارند.
تطابق. (تفاوت این مجموعه ها در این است که برخی چیزها مانند اعداد رومی،
با حروف بزرگ و کوچک می آیند، بنابراین "Cased" هستند، اما در نظر گرفته نمی شوند
حروف، بنابراین آنها "Cased_Letter" نیستند. آنها در واقع "حرف_عدد" هستند.) این مجموعه
همچنین شامل زیرمجموعه های "PosixUpper" و "PosixLower" است که هر دو تحت "/i" مطابقت دارند.
"پوزیکس آلفا".

برای جزئیات بیشتر در مورد ویژگی های یونیکد، به "ویژگی های کاراکتر یونیکد" در perlunicode مراجعه کنید.
برای فهرست کاملی از ویژگی های ممکن، به "ویژگی های قابل دسترسی از طریق \p{} و" مراجعه کنید
\P{}" در perluniprops، که تمام اشکالی را که تفاوت های "/i" دارند، یادداشت می کند.
امکان تعریف ویژگی های خود این موضوع در «شخصیت تعریف شده توسط کاربر» مورد بحث قرار گرفته است
خواص" در perlunicode.

ویژگی های یونیکد (شگفت آور!) فقط در نقاط کد یونیکد تعریف شده است. شروع در
نسخه 5.20، هنگام تطبیق با "\p" و "\P"، Perl به نقاط کد غیر یونیکد (آنهایی که
بالاتر از حداکثر قانونی یونیکد 0x10FFFF) گویی که یونیکدهای معمولی اختصاص داده نشده هستند
نقاط کد

قبل از نسخه 5.20، پرل یک اخطار داد و باعث شد همه موارد مطابق با کد غیر یونیکد شکست بخورند.
نکته ها. این می تواند تا حدودی تعجب آور باشد:

CHR(0x110000) =~ \p{ASCII_Hex_Digit=True} # Fails در Perls < v5.20.
CHR(0x110000) =~ \p{ASCII_Hex_Digit=False} # همچنین در Perls ناموفق است
# < v5.20

اگرچه ممکن است این دو مسابقه به عنوان مکمل در نظر گرفته شوند، اما تا نسخه 5.20 چنین بود
فقط در نقاط کد یونیکد.

مثال ها

"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}/ # Match، \x{0e0b} شخصیت است
# 'شخصیت تای SO'، و این در
# کلاس یونیکد تایلندی.
"a" =~ /\P{Lao}/ # Match، زیرا "a" یک شخصیت لائوسی نیست.

شایان ذکر است که "\d"، "\w"، و غیره با کاراکترهای تک مطابقت دارند، نه کامل
اعداد یا کلمات برای مطابقت با یک عدد (که از اعداد تشکیل شده است)، از "\d+" استفاده کنید. برای تطبیق یک کلمه،
از "\w+" استفاده کنید. اما همانطور که در بالا ذکر شد در انجام این کار از ملاحظات امنیتی آگاه باشید.

پرانتز شده شخصیت کلاس
سومین شکل کلاس کاراکتر که می توانید در عبارات منظم پرل استفاده کنید، پرانتز است
کلاس شخصیت در ساده ترین شکل خود، کاراکترهایی را که ممکن است مطابقت داشته باشند فهرست می کند.
احاطه شده با پرانتز مربع، مانند این: "[aeiou]". این با یکی از "a"، "e"، "i" مطابقت دارد.
"o" یا "u". مانند سایر کلاس‌های کاراکتر، دقیقاً یک کاراکتر مطابقت دارد.* برای مطابقت
یک رشته طولانی‌تر از کاراکترهای ذکر شده در کلاس کاراکتر، دنبال کنید
کلاس کاراکتر با یک کمیت. برای مثال، "[aeiou]+" با یک یا چند حروف کوچک مطابقت دارد
حروف صدادار انگلیسی

تکرار یک کاراکتر در کلاس کاراکتر هیچ تاثیری ندارد. در مجموعه در نظر گرفته شده است
فقط یک بار.

مثال:

"e" =~ /[aeiou]/ # مطابقت، همانطور که "e" در کلاس فهرست شده است.
"p" =~ /[aeiou]/ # مطابقت ندارد، "p" در کلاس فهرست نشده است.
"ae" =~ /^[aeiou]$/ # مطابقت ندارد، یک کلاس کاراکتر فقط مطابقت دارد
# یک شخصیت
"ae" =~ /^[aeiou]+$/ # مطابقت، به دلیل کمیت.

-------

* دو استثنا برای یک کلاس کاراکتر پرانتزی که با یک کاراکتر منطبق است وجود دارد
فقط. هر کدام نیاز به مدیریت خاصی توسط پرل دارند تا کارها را انجام دهند:

· وقتی قرار است کلاس به صورت بدون حروف تحت قوانین تطبیق "/i" و یک کاراکتر مطابقت داشته باشد
به صراحت در داخل کلاس ذکر شده است که با یک دنباله چند کاراکتری مطابقت دارد
بدون مورد تحت قوانین یونیکد، کلاس نیز با آن دنباله مطابقت دارد. مثلا،
یونیکد می گوید که حرف "LATIN SMALL LETTER SHARP S" باید با دنباله مطابقت داشته باشد.
"ss" تحت قوانین "/i". بدین ترتیب،

'ss' =~ /\A\N{حروف کوچک لاتین SHARP}\z/i # منطبق
'ss' =~ /\A[aeioust\N{LATIN SMALL SHARP SHARP}]\z/i # مطابقت

برای اینکه این اتفاق بیفتد، کلاس نباید معکوس شود (به "نفی" مراجعه کنید) و کاراکتر
باید به صراحت مشخص شود و بخشی از یک محدوده چند کاراکتری نباشد (حتی به عنوان
یکی از نقاط پایانی آن). ("محدوده های شخصیت" به زودی توضیح داده خواهد شد.) بنابراین،

'ss' =~ /\A[\0-\x{ff}]\z/ui # مطابقت ندارد
'ss' =~ /\A[\0-\N{LATIN SMALL SHARP SHARP}]\z/ui # مطابقت ندارد
'ss' =~ /\A[\xDF-\xDF]\z/ui # منطبق بر پلتفرم‌های ASCII، از آنجا که
# \xDF SHARP با حرف کوچک لاتین است،
# و محدوده فقط یک واحد است
# عنصر

توجه داشته باشید که به هر حال مشخص کردن این نوع محدوده ها ایده خوبی نیست.

· برخی از نام‌هایی که با "\N{...}" شناخته می‌شوند، به‌جای نام، به دنباله‌ای از نویسه‌های متعدد اشاره دارند
شخصیت مجرد معمولی وقتی یکی از اینها در کلاس گنجانده شود، کل
دنباله مطابقت دارد مثلا،

"\N{TAMIL LETTER KA}\N{TAMIL WOWEL SIGN AU}"
=~ / ^ [\N{TAMIL SYLLABLE KAU}] $ /x;

مطابقت دارد، زیرا "\N{TAMIL SYLLABLE KAU}" دنباله ای نامگذاری شده است که از این دو تشکیل شده است.
کاراکترهای مطابق با مانند نمونه دیگری که یک کلاس پرانتزی می تواند مطابقت داشته باشد
کاراکترهای متعدد، و به دلایل مشابه، کلاس نباید معکوس شود، و
دنباله نامگذاری شده ممکن است در یک محدوده ظاهر نشود، حتی در محدوده ای که هر دو نقطه پایانی باشد. اگر
این اتفاق می افتد، اگر کلاس کاراکتر در یک Extended باشد، یک خطای مرگبار است
کلاس "(؟[...])" و فقط از اولین نقطه کد استفاده می شود (با یک هشدار از نوع "regexp".
مطرح شده) در غیر این صورت.

ویژه شخصیت داخل a پرانتز شده شخصیت طبقه

اکثر کاراکترهایی که متا کاراکترها در عبارات منظم هستند (یعنی کاراکترهایی که
حامل یک معنی خاص مانند "."، "*"، یا "(") معنای خاص خود را از دست می دهند و می توانند استفاده شوند
در یک کلاس شخصیت بدون نیاز به فرار از آنها. به عنوان مثال، "[()] مطابقت دارد
یا یک پرانتز باز، یا یک پرانتز بسته، و پرانتزهای داخل
کلاس کاراکتر را گروه بندی یا ضبط نکنید.

کاراکترهایی که ممکن است معنای خاصی در کلاس کاراکتر داشته باشند عبارتند از: "\"، "^"، "-"،
"[" و "]"، و در زیر مورد بحث قرار می گیرند. آنها را می توان با یک بک اسلش فرار کرد، اگرچه این
گاهی اوقات مورد نیاز نیست، در این صورت ممکن است بک اسلش حذف شود.

دنباله "\b" در یک کلاس کاراکتر پرانتزی خاص است. در حالی که خارج از
کلاس کاراکتر، "\b" ادعایی است که نقطه ای را نشان می دهد که هیچ دو را ندارد
کاراکترهای کلمه یا دو کاراکتر غیرکلمه ای در دو طرف، در داخل یک کاراکتر پرانتزی
کلاس، "\b" با یک کاراکتر backspace مطابقت دارد.

دنباله های "\a"، "\c"، "\e"، "\f"، "\n"، "\N{نام}"، "\N{U+هگزا کاراکتر}"، "\r"، "\t"، و
"\x" نیز خاص هستند و همان معانی را دارند که در خارج از یک کاراکتر پرانتزی انجام می دهند
کلاس.

همچنین، یک بک اسلش که دو یا سه رقم هشتی به دنبال آن باشد، یک عدد اکتال در نظر گرفته می شود.

یک "[" در کلاس کاراکتر خاص نیست، مگر اینکه شروع یک کاراکتر POSIX باشد
کلاس (به "کلاس های کاراکتر POSIX" در زیر مراجعه کنید). معمولاً نیازی به فرار ندارد.

یک "]" معمولاً پایان یک کلاس کاراکتر POSIX است (به "کلاس های کاراکتر POSIX" مراجعه کنید.
در زیر)، یا پایان کلاس کاراکترهای پرانتزی را نشان می دهد. اگر می خواهید الف را وارد کنید
"]" در مجموعه کاراکترها، به طور کلی باید از آن فرار کنید.

با این حال، اگر "]" باشد اول (یا دومی اگر کاراکتر اول کارت باشد)
کاراکتر یک کلاس کاراکتر پرانتزی، نشان دهنده پایان کلاس نیست (مثل شما
نمی تواند یک کلاس خالی داشته باشد) و بخشی از مجموعه کاراکترهایی است که می تواند باشد
بدون فرار همسان شد

مثال:

"+" =~ /[+؟*]/ # مطابقت، "+" در کلاس کاراکتر خاص نیست.
"\cH" =~ /[\b]/ # مطابقت، \b در داخل یک کلاس کاراکتر
# معادل بک اسپیس است.
"]" =~ /[][]/ # مطابقت، همانطور که در کلاس کاراکتر وجود دارد
# هر دو و ].
"[]" =~ /[[]]/ # مطابقت، الگو شامل یک کلاس کاراکتر است
# حاوی فقط [، و کلاس کاراکتر است
# به دنبال آن یک ].

شخصیت محدوده

غیر معمول نیست که بخواهیم طیفی از شخصیت ها را با هم تطبیق دهیم. خوشبختانه، به جای فهرست کردن همه
کاراکترهای موجود در محدوده، می توان از خط فاصله ("-") استفاده کرد. اگر داخل یک کاراکتر پرانتزی است
کلاس شما دو کاراکتر دارید که با خط فاصله از هم جدا شده اند، به گونه ای رفتار می شود که گویی همه کاراکترها
بین آن دو در کلاس بودند. به عنوان مثال، "[0-9]" با هر رقم ASCII مطابقت دارد، و
"[am]" با هر حرف کوچک از نیمه اول الفبای ASCII مطابقت دارد.

توجه داشته باشید که دو کاراکتر در دو طرف خط تیره لزوما هر دو حرف نیستند
یا هر دو رقم هر شخصیتی ممکن است، اگرچه توصیه نمی شود. "['-?]" حاوی یک
طیفی از شخصیت‌ها، اما بیشتر مردم نمی‌دانند که منظور کدام شخصیت است.
علاوه بر این، اگر کد باید روی a اجرا شود، چنین محدوده‌هایی ممکن است منجر به مشکلات قابل حمل شوند
پلتفرمی که از مجموعه کاراکترهای متفاوتی مانند EBCDIC استفاده می کند.

به عنوان مثال، اگر خط فاصله در یک کلاس کاراکتر از نظر نحوی نمی تواند بخشی از یک محدوده باشد
زیرا اولین یا آخرین کاراکتر کلاس کاراکتر است یا اگر بلافاصله باشد
از یک محدوده پیروی می کند، خط فاصله خاص نیست، و بنابراین یک کاراکتر قابل تطبیق در نظر گرفته می شود
به معنای واقعی کلمه. اگر می خواهید یک خط فاصله در مجموعه کاراکترهای شما و موقعیت آن مطابقت داشته باشد
در کلاس به گونه ای است که می تواند بخشی از یک محدوده در نظر گرفته شود، شما باید از آن فرار کنید
خط تیره با علامت عقب

مثال:

[az] # با کاراکتری که یک حرف اسکی کوچک است مطابقت دارد.
[a-fz] # هر حرفی بین 'a' و 'f' (شامل) یا مطابقت دارد
# حرف z.
[-z] # با خط فاصله ('-') یا حرف 'z' مطابقت دارد.
[afm] # با هر حرفی بین 'a' و 'f' (شامل) مطابقت دارد
خط تیره # ('-')، یا حرف 'm'.
['-?] # با هر یک از کاراکترهای '()*+,-./0123456789:;<=> مطابقت دارد؟
# (اما نه در یک پلت فرم EBCDIC).
[\N{APOSTROPHE}-\N{QUESTION MARK}]
# با هر یک از کاراکترهای '()*+,-./0123456789:;<=> مطابقت دارد؟
# حتی در یک پلت فرم EBCDIC.
[\N{U+27}-\N{U+3F}] # مشابه. (U+27 «'» و U+3F «؟» است)

همانطور که دو مثال آخر بالا نشان می دهد، می توانید با استفاده از آن به قابلیت حمل بر روی پلتفرم های غیر اسکی دست پیدا کنید
با استفاده از فرم "\N{...}" برای نقاط انتهایی محدوده. اینها نشان می دهد که محدوده مشخص شده است
باید با استفاده از مقادیر یونیکد تفسیر شود، بنابراین "[\N{U+27}-\N{U+3F}]" به معنای مطابقت است
«\N{U+27}»، «\N{U+28}»، «\N{U+29}»، ...، «\N{U+3D}»، «\N{U+ 3E}، و "\N{U+3F}"، هر چه باشد
نسخه های کد بومی برای آن ها هستند. به این محدوده های "یونیکد" می گویند. اگر
هر دو انتهای آن از فرم "\N{...}" است، محدوده یونیکد در نظر گرفته می شود. یک هشدار "regexp".
در صورتی که نقطه پایانی دیگر به صورت غیرقابل حمل مشخص شده باشد، تحت "use re 'strict'" مطرح می شود:

[\N{U+00}-\x09] # Warning under re 'strict'; \x09 غیر قابل حمل است
[\N{U+00}-\t] # بدون هشدار.

هر دو مورد بالا با کاراکترهای "\N{U+00}" "\N{U+01}"، ... "\N{U+08}"، "\N{U+09}"، مطابقت دارند.
اما به نظر می رسد "\x09" ممکن است یک اشتباه باشد، بنابراین هشدار داده می شود (در زیر "re
"سخت") برای آن.

پرل همچنین تضمین می‌کند که محدوده‌های "AZ"، "az"، "0-9" و زیرمجموعه‌های این موارد مطابقت دارند.
چیزی که یک گوینده فقط انگلیسی انتظار دارد که آنها در هر پلتفرمی مطابقت داشته باشند. یعنی "[AZ]"
با 26 حرف بزرگ ASCII مطابقت دارد. "[az]" با 26 حرف کوچک مطابقت دارد. و
"[0-9]" با 10 رقم مطابقت دارد. زیرمجموعه‌هایی مانند "[hk]" به همین ترتیب در این مطابقت دارند
فقط چهار حرف "h"، "i"، "j" و "k" را در این حالت قرار دهید. این رفتار طبیعی در ASCII است
پلتفرم هایی که نقاط کد (مقادیر ترتیبی) برای "h" تا "k" متوالی هستند
اعداد صحیح (0x68 تا 0x6B). اما برای دستیابی به این امر ممکن است نیاز به مدیریت خاصی باشد
پلتفرم هایی با مجموعه شخصیت های بومی غیر ASCII. به عنوان مثال، در پلتفرم های EBCDIC،
نقطه کد برای "h" 0x88، "i" 0x89، "j" 0x91، و "k" 0x92 است. پرل مخصوصا
"[hk]" را برای حذف هفت نقطه کد در شکاف استفاده می کند: 0x8A تا 0x90. این
هندلینگ ویژه تنها زمانی فراخوانی می شود که محدوده زیر محدوده یکی از ASCII باشد
محدوده های بزرگ، کوچک و رقمی، و هر انتهای محدوده یا به صورت یک نشان داده می شود
تحت اللفظی، مانند "A"، یا به عنوان یک کاراکتر با نام ("\N{...}، از جمله شکل "\N{U+...").

مثال های EBCDIC:

[ij] # با "i" یا "j" مطابقت دارد
[i-\N{حروف کوچک لاتین 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"); خاص
# هندلینگ اعمال نمی شود زیرا محدوده مختلط است
# مورد

نفی

همچنین ممکن است به جای آن کاراکترهایی را که نمی خواهید مطابقت دهید فهرست کنید. شما می توانید این کار را انجام دهید
با استفاده از caret ("^") به عنوان اولین کاراکتر در کلاس کاراکتر. برای مثال،
"[^az]" با هر کاراکتری که یک حرف ASCII کوچک نیست مطابقت دارد، بنابراین
شامل بیش از یک میلیون نقطه کد یونیکد است. گفته می شود کلاس "نفی" یا
"وارونه".

این نحو، caret را به یک کاراکتر خاص در داخل یک کلاس کاراکتر پرانتزی تبدیل می‌کند، اما
فقط در صورتی که اولین کاراکتر کلاس باشد. بنابراین اگر شما می خواهید حفاظ به عنوان یکی از
کاراکترهایی که باید مطابقت داشته باشند، یا از قفسه فرار کنید یا ابتدا آن را فهرست نکنید.

در کلاس‌های کاراکتر براکت‌دار معکوس، پرل قوانین یونیکد را که معمولاً می‌گویند نادیده می‌گیرد
که توالی نامگذاری شده، و کاراکترهای خاص باید با دنباله ای از چندین کاراکتر مطابقت داشته باشند
از تطبیق بدون حروف "/i" استفاده کنید. پیروی از این قوانین می تواند منجر به بسیار گیج کننده شود
موقعیت ها:

"ss" =~ /^[^\xDF]+$/ui; # مسابقات!

این باید با هر دنباله ای از نویسه ها مطابقت داشته باشد که "\xDF" و یا "\xDF" مطابقت ندارد
در زیر "/i". "s" "\xDF" نیست، اما یونیکد می گوید که "ss" همان چیزی است که "\xDF" با آن مطابقت دارد.
"/من". پس کدام یک "برنده" می شود؟ آیا به دلیل اینکه رشته دارای "ss" است در مسابقه شکست می خورید یا آن را می پذیرید
چون یک "s" به دنبال آن یک "s" دیگر دارد؟ پرل دومی را انتخاب کرده است. (به یادداشت در مراجعه کنید
"کلاس های کاراکتر پرانتزی" در بالا.)

مثال:

"e" =~ /[^aeiou]/ # مطابقت ندارد، 'e' فهرست شده است.
"x" =~ /[^aeiou]/ # مطابقت دهید، زیرا 'x' یک مصوت کوچک نیست.
"^" =~ /[^^]/ # هیچ منطبقی نیست، با هر چیزی که یک caret نیست مطابقت دارد.
"^" =~ /[x^]/ # Match، caret اینجا خاص نیست.

بک گراند دنباله

شما می توانید هر کلاس کاراکتر دنباله اسلش را قرار دهید (به استثنای "\N" و "\R")
داخل یک کلاس کاراکتر پرانتزی، و درست مثل اینکه همه کاراکترها را قرار داده اید عمل می کند
با توالی بک اسلش در کلاس کاراکتر مطابقت دارد. به عنوان مثال، "[af\d]"
با هر رقم اعشاری یا هر یک از حروف کوچک بین 'a' و 'f' مطابقت دارد.

"\N" در یک کلاس کاراکتر پرانتزی باید به شکل "\N{ باشد.نام}" یا "\N{U+هگزا
کاراکتر}"و فرمی نباشد که با خطوط غیرجدید مطابقت داشته باشد، به همان دلیلی که یک نقطه "."
در داخل یک کلاس کاراکتر پرانتزی معنای خاص خود را از دست می دهد: تقریباً با هر چیزی مطابقت دارد،
که معمولاً آن چیزی نیست که شما می خواهید اتفاق بیفتد.

مثال:

/[\p{Thai}\d]/ # با شخصیتی مطابقت دارد که یا تایلندی است
# کاراکتر یا یک رقم.
/[^\p{عربی}()]/ # با کاراکتری که عربی نیست مطابقت دارد
# کاراکتر، نه پرانتز.

کلاس های کاراکتر توالی بک اسلش نمی توانند یکی از نقاط پایانی یک محدوده را تشکیل دهند. بدین ترتیب،
شما نمی توانید بگویید:

/[\p{تایلندی}-\d]/ # اشتباه است!

POSIX شخصیت کلاس

کلاس های کاراکتر POSIX شکل "[:class:]" دارند، که در آن کلاس نام است و "[:"
و جداکننده های ":]". کلاس های کاراکتر POSIX فقط ظاهر می شوند داخل کاراکتر پرانتزی
کلاس‌ها و روشی مناسب و توصیفی برای فهرست کردن گروهی از شخصیت‌ها هستند.

مراقب نحو باشید،

# درست:
$string =~ /[[:alpha:]]/

# نادرست (هشدار خواهد داد):
$string =~ /[:alpha:]/

الگوی دوم یک کلاس کاراکتر متشکل از دو نقطه و حروف "a" است.
"l"، "p" و "h".

کلاس های کاراکتر POSIX می توانند بخشی از یک کلاس کاراکتر پرانتزی بزرگتر باشند. مثلا،

[01[:alpha:]%]

معتبر است و با '0'، '1'، هر نویسه الفبایی و علامت درصد مطابقت دارد.

پرل کلاس های کاراکتر POSIX زیر را تشخیص می دهد:

alpha هر نویسه الفبایی ("[A-Za-z]").
alnum هر نویسه الفبایی عددی ("[A-Za-z0-9]").
ascii هر کاراکتری در مجموعه کاراکترهای ASCII.
خالی یک پسوند گنو، برابر با یک فاصله یا یک برگه افقی ("\t").
cntrl هر کاراکتر کنترلی. به یادداشت [2] زیر مراجعه کنید.
رقم هر رقم اعشاری ("[0-9]")، معادل "\d".
نمودار هر کاراکتر قابل چاپ، به استثنای فاصله. به یادداشت [3] زیر مراجعه کنید.
کوچک هر کاراکتر کوچک ("[az]").
چاپ هر کاراکتر قابل چاپ، از جمله فاصله. به یادداشت [4] زیر مراجعه کنید.
punct هر کاراکتر گرافیکی به استثنای کاراکترهای "word". تبصره [5].
space هر کاراکتر فضای خالی. "\s" از جمله برگه عمودی
("\cK").
upper هر نویسه بزرگ ("[AZ]").
کلمه A پسوند Perl ("[A-Za-z0-9_]")، معادل "\w".
xdigit هر رقم هگزادسیمال ("[0-9a-fA-F]").

مانند ویژگی‌های یونیکد، بیشتر ویژگی‌های POSIX بدون در نظر گرفتن موارد مشابه با هم مطابقت دارند
آیا تطبیق بدون حساس به حروف بزرگ و کوچک ("/i") در حال اجرا است یا خیر. دو استثنا هستند
"[:بالا و پایین:]". در زیر "/i"، هر کدام با اتحاد "[:upper:]" و
"[:lower:]".

اکثر کلاس‌های کاراکتر POSIX دارای دو ویژگی مشابه «\p» به سبک یونیکد هستند. (آن ها هستند
نه ویژگی های رسمی یونیکد، بلکه پسوندهای پرل که از یونیکد رسمی مشتق شده اند
خصوصیات.) جدول زیر رابطه بین کلاس های کاراکتر POSIX و آنها را نشان می دهد
همتایان.

یک همتا، در ستون با عنوان "یونیکد محدوده ASCII" در جدول، فقط مطابقت دارد
کاراکترها در مجموعه کاراکترهای ASCII.

همتای دیگر، در ستون با عنوان "یونیکد با برد کامل"، با هر یک مطابقت دارد
کاراکترهای مناسب در مجموعه کامل کاراکترهای یونیکد. برای مثال، "\p{Alpha}"
نه تنها با حروف الفبای ASCII، بلکه با هر کاراکتری در کل یونیکد مطابقت دارد
مجموعه حروف الفبا در نظر گرفته شده است. ورودی در ستون با عنوان "توالی معکوس"
معادل (کوتاه) است.

[[:...:]] یادداشت بک اسلش با برد کامل ASCII
یونیکد دنباله یونیکد
-------------------------------------------------- ---
آلفا \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]
رقم \p{PosixDigit} \p{XPosixDigit} \d
نمودار \p{PosixGraph} \p{XPosixGraph} [3]
پایین \p{PosixLower} \p{XPosixLower}
print \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] کاراکترهای کنترل به این صورت خروجی تولید نمی کنند، اما در عوض معمولاً آن را کنترل می کنند
ترمینال به نوعی: برای مثال، newline و backspace کاراکترهای کنترلی هستند. در ASCII
پلتفرم ها، در محدوده ASCII، کاراکترهایی که نقاط کد آنها بین 0 تا 31 است
شامل، به علاوه 127 ("DEL") کاراکترهای کنترل هستند. در پلتفرم های EBCDIC، آنها
همتایان کاراکترهای کنترلی هستند.

[3] هر شخصیتی که باشد گرافیکی، یعنی قابل مشاهده است. این کلاس از همه تشکیل شده است
کاراکترهای الفبایی و تمام نویسه های نقطه گذاری.

[4] همه کاراکترهای قابل چاپ، که مجموعه ای از همه کاراکترهای گرافیکی به اضافه آن ها است
کاراکترهای فضای خالی که کنترل هم نیستند.

[5] "\p{PosixPunct}" و "[[:punct:]]" در محدوده ASCII با همه غیر کنترل‌ها مطابقت دارند.
حروف عددی، نویسه‌های بدون فاصله: "[-!"#$%&'()*+,./:;<=>?@[\\\]^_`{|}~]" (اگرچه
اگر محلی در کار باشد، می تواند رفتار "[[:punct:]]" را تغییر دهد).

ویژگی با نام مشابه، "\p{Punct}"، با مجموعه‌ای تا حدودی متفاوت در آن مطابقت دارد
محدوده ASCII، یعنی "[-!"#%&'()*,./:;?@[\\\]_{}]. یعنی XNUMX را از دست داده است.
کاراکترهای "[$+<=>^`|~]". این به این دلیل است که یونیکد آنچه را که POSIX می‌داند تقسیم می‌کند
علائم نگارشی به دو دسته علائم نگارشی و نمادها.

"\p{XPosixPunct}" و (طبق قوانین یونیکد) "[[:punct:]]"، مطابق با "\p{PosixPunct}"
منطبق در محدوده ASCII، به علاوه آنچه "\p{Punct}" مطابقت دارد. این متفاوت از
مطابق با "\p{Punct}". راه دیگر برای گفتن آن این است که اگر یونیکد
قوانین در حال اجرا هستند، "[[:punct:]]" با تمام کاراکترهایی که یونیکد در نظر می گیرد مطابقت دارد
علائم نگارشی، به علاوه همه کاراکترهای محدوده ASCII که یونیکد نمادها را در نظر می گیرد.

[6] "\p{XPerlSpace}" و "\p{Space}" به طور یکسان با Perl نسخه 5.18 شروع می‌شوند. که در
نسخه‌های قبلی، این‌ها فقط در تطابق غیرمکانی «\p{XPerlSpace}» متفاوت هستند.
با برگه عمودی "\cK" مطابقت نداشت. برای دو فرم محدوده فقط ASCII هم همینطور.

مترادف های مختلف دیگری نیز وجود دارد که می توان علاوه بر نام های ذکر شده در جدول از آنها استفاده کرد.
به عنوان مثال، "\p{PosixAlpha}" را می توان به صورت "\p{Alpha}" نوشت. همه در فهرست شده اند
"ویژگی های قابل دسترسی از طریق \p{} و \P{}" در perluniprops.

هر دو همتای "\p" همیشه فرض می کنند که قوانین یونیکد در حال اجرا هستند. در پلتفرم های ASCII،
این بدان معنی است که آنها فرض می کنند که نقاط کد از 128 تا 255 لاتین-1 هستند، و این بدان معنی است که
که استفاده از آنها تحت قوانین محلی غیرعاقلانه است مگر اینکه محلی بودن آن تضمین شده باشد که لاتین-1 باشد
یا UTF-8. در مقابل، کلاس های کاراکتر POSIX تحت قوانین محلی مفید هستند. آنها
تحت تأثیر قوانین واقعی موجود هستند، به شرح زیر:

اگر اصلاح کننده "/a" در حال اجرا باشد ...
هر یک از کلاس‌های POSIX دقیقاً با همتایان خود در محدوده ASCII مطابقت دارند.

در غیر این صورت ...
برای نقاط کد بالای 255 ...
کلاس POSIX با همتای Full-range خود مطابقت دارد.

برای کدهای زیر 256 ...
اگر قوانین محلی اعمال شوند ...
کلاس POSIX با توجه به منطقه منطبق است، به جز:

"کلمه"
همچنین شامل شخصیت اصلی این پلتفرم، مهم نیست که چه باشد
محل است.

"اسکی"
در پلتفرم هایی که پسوند POSIX "ascii" ندارند، این منطبق است
فقط کاراکترهای بومی محدوده ASCII پلتفرم.

"جای خالی"
در پلتفرم هایی که پسوند «خالی» POSIX ندارند، این منطبق است
فقط تب بومی پلتفرم و کاراکترهای فضایی.

اگر قوانین یونیکد اجرا شود ...
کلاس POSIX با همتای Full-range مطابقت دارد.

در غیر این صورت ...
کلاس POSIX با همتای محدوده ASCII مطابقت دارد.

اینکه کدام قواعد اعمال می‌شود، همانطور که در «مدیفایر مجموعه کاراکترها در کدام است.» توضیح داده شده است
اثر؟" در پرلر.

پیشنهاد می‌شود در نسخه‌های آینده پرل این رفتار را تغییر دهید تا چه نشود
قوانین یونیکد در عمل، رفتار را تغییر نمی دهند: خارج از منطقه، POSIX
کلاس ها مانند همتایان خود در محدوده ASCII رفتار می کنند. اگر مایلید در این مورد نظر بدهید
پیشنهاد، ارسال ایمیل به "[ایمیل محافظت شده]".

نفی کلاس های کاراکتر POSIX

پسوند Perl به کلاس کاراکتر POSIX توانایی نفی آن است. این کار توسط
پیشوند نام کلاس با علامت ("^"). چند نمونه:

POSIX ASCII-range بک اسلش کامل
یونیکد دنباله یونیکد
-------------------------------------------------- ---
[[:^ رقم:]] \P{PosixDigit} \P{XPosixDigit} \D
[[:^space:]] \P{PosixSpace} \P{XPosixSpace}
\P{PerlSpace} \P{XPerlSpace} \S
[[:^word:]] \P{PerlWord} \P{XPosixWord} \W

توالی بک اسلش بسته به موارد مختلف می تواند به معنای یونیکد ASCII یا Full-range باشد
عواملی که در "کدام اصلاح کننده مجموعه کاراکتر در حال اجرا است؟" در پرل.

[= =] و [. .]

پرل کلاس های کاراکتر POSIX "[=class=]" و "[.class.]" را می شناسد، اما نمی شناسد.
(هنوز؟) از آنها حمایت کنید. هر تلاشی برای استفاده از هر یک از این دو ساختار یک استثنا را ایجاد می کند.

مثال ها

/[[:digit:]]/ # با کاراکتری که یک رقم است مطابقت دارد.
/[01[:lower:]]/ # با کاراکتری مطابقت دارد که یکی است
# حرف کوچک یا "0" یا "1".
/[[:digit:][:^xdigit:]]/ # با شخصیتی مطابقت دارد که می‌تواند هر چیزی باشد
# به جز حروف "a" تا "f" و "A" به
# 'F'. دلیلش این است که شخصیت اصلی
کلاس # از دو کاراکتر POSIX تشکیل شده است
# کلاسی که با هم OR شده اند، یکی که
# با هر رقمی مطابقت دارد و رقم دیگر با آن مطابقت دارد
# با هر چیزی که یک رقم هگزا نیست مطابقت دارد.
# OR ارقام را اضافه می کند و فقط عدد را باقی می گذارد
# حرف "a" تا "f" و "A" تا "F" حذف شده است.

تمدید شده پرانتز شده شخصیت کلاس

این یک کلاس کاراکتر پرانتزی فانتزی است که می تواند برای خواندن بیشتر و کمتر استفاده شود
کلاس های مستعد خطا و انجام عملیات مجموعه ای مانند تقاطع. یک مثال است

/(?[ \p{تایلندی} و \p{رقمی} ])/

این با تمام کاراکترهای رقمی که در خط تایلندی هستند مطابقت دارد.

این یک ویژگی آزمایشی است که از نسخه 5.18 در دسترس است و با تغییر ما ممکن است
تجربه میدانی با آن کسب کنید. هر گونه تلاش برای استفاده از آن یک هشدار ایجاد می کند، مگر اینکه
غیر فعال شده از طریق

بدون هشدار "experimental::regex_sets";

نظرات در مورد این ویژگی خوش آمدید. ارسال ایمیل به "[ایمیل محافظت شده]".

می‌توانیم مثال بالا را گسترش دهیم:

/(?[ ( \p{تایلندی + \p{لائو} ) و \p{رقم} ])/

این با ارقامی مطابقت دارد که به خط تایلندی یا لائوسی هستند.

به فضای سفید در این مثال ها توجه کنید. این ساختار همیشه دارای اصلاح کننده "/x" است
درون آن روشن شد

عملگرهای باینری موجود عبارتند از:

& تقاطع
+ اتحادیه
| نام دیگری برای '+'، از این رو به معنای اتحاد است
- تفریق (نتیجه با مجموعه متشکل از آن مطابقت دارد
نقاط کد منطبق با عملوند اول، به استثنای هر یک از آن
با عملوند دوم هم مطابقت دارند)
^ اختلاف متقارن (اتحادیه منهای تقاطع). این
مانند یک انحصاری یا در نتیجه مجموعه کد است
نقاطی که با هر دو، اما نه هر دو، مطابقت دارند
عملوندها

یک عملگر واحد وجود دارد:

! متمم

همه عملگرهای باینری از همکار باقی مانده اند. "&" نسبت به بقیه اولویت بیشتری دارد که
همه دارای تقدم مساوی هستند حق اپراتور یکنواخت مرتبط است و بالاترین را دارد
تقدم بنابراین این از قوانین تقدم معمول پرل برای عملگرهای منطقی پیروی می کند.
برای نادیده گرفتن اولویت و ارتباط پیش‌فرض از پرانتز استفاده کنید.

محدودیت اصلی این است که همه چیز یک فراکاراکتر است. بنابراین، شما نمی توانید به آن مراجعه کنید
شخصیت های تک با انجام کاری شبیه به این:

/(?[ a + b ])/ # خطای نحوی!

ساده ترین راه برای تعیین یک کاراکتر قابل تایپ جداگانه، قرار دادن آن در پرانتز است:

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

(این همان چیزی است که "[ab]).

/(?[[ ab ]])/

(البته می توانید با استفاده از "\x{...}"، "\N{...}، و غیره، نویسه های منفرد را مشخص کنید)

این مثال آخر استفاده از این ساختار را برای تعیین یک براکت معمولی نشان می دهد
کلاس کاراکتر بدون عملیات مجموعه اضافی. به فضای سفید داخل آن توجه کنید. "/ایکس"
حتی در کلاس‌های کاراکتر پرانتزی روشن است، به جز اینکه نمی‌توانید نظر داشته باشید
داخل آنها از این رو،

(؟[ [#] ])

با کاراکتر تحت اللفظی "#" مطابقت دارد. برای تعیین یک کاراکتر فضای سفید تحت اللفظی، می توانید
با یک اسلش از آن فرار کنید، مانند:

/(?[ [ aeiou \ ] ])/

این با حروف صدادار انگلیسی به اضافه کاراکتر SPACE مطابقت دارد. همه فرارهای دیگر پذیرفته شد
توسط کلاس های کاراکتر پرانتزی معمولی در اینجا نیز پذیرفته می شود. اما ناشناس فرار می کند
که در کلاس های معمولی اخطار ایجاد می کند، در اینجا خطاهای مرگبار است.

همه اخطارهای این عناصر کلاس، و همچنین برخی از اقدامات که اینطور نیست، کشنده هستند
در حال حاضر هشدار می دهد مثلا نمی توانید بگویید

/(?[ [ \xF ] ])/ # خطای نحوی!

شما باید دو رقم هگزا پس از "\x" بدون پرانتز داشته باشید (از صفر اول برای ایجاد دو استفاده کنید).
این محدودیت‌ها برای کاهش احتمال اشتباهات تایپی است که باعث می‌شود کلاس با آن مطابقت نداشته باشد
فکر کردی

اگر یک کلاس کاراکتر پرانتزی معمولی حاوی "\p{}" یا "\P{}" باشد و با آن مطابقت داشته باشد.
یک نقطه کد غیر یونیکد، ممکن است یک هشدار مطرح شود، زیرا نتیجه توسط یونیکد تعریف نشده است.
هنگام استفاده از این فرم توسعه یافته، چنین هشداری ارائه نخواهد شد.

تفاوت نهایی بین کلاس‌های کاراکتر پرانتزی معمولی با این کلاس‌ها این است که هست
این امکان وجود ندارد که اینها را با یک تاشو چند کاراکتری مطابقت دهید. بدین ترتیب،

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

با رشته "ss" مطابقت ندارد.

شما مجبور نیستید نام کلاس های POSIX را داخل دو براکت قرار دهید، بنابراین هر دوی اینها
کار زیر:

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

هر یک از کلاس های کاراکتر POSIX شامل مواردی مانند "\w" و "\D" به آنها احترام می گذارد
اصلاح کننده های "/a" (و "/aa").

"(?[ ])" یک ساختار regex-compile-time است. هر گونه تلاش برای استفاده از چیزی که نیست
قابل دانستن در زمان کامپایل شدن عبارت منظم حاوی یک خطای مرگبار است. که در
تمرین کنید، این به معنای تنها سه محدودیت است:

1. این ساختار را نمی توان در محدوده "use locale" (یا regex "/l" استفاده کرد
اصلاح کننده).

2. هر خاصیت تعریف شده توسط کاربر استفاده شده باید در زمان معمولی تعریف شده باشد
عبارت کامپایل شده است (اما توجه داشته باشید که این ساختار را می توان به جای آن استفاده کرد
خواص).

3. یک عبارت منظم که در غیر این صورت با استفاده از قوانین "/d" کامپایل می شود و از آن استفاده می کند
این ساختار در عوض از "/u" استفاده می کند. بنابراین این ساختار به پرل می گوید که شما این کار را نمی کنید
قوانین "/d" را برای کل عبارت منظم حاوی آن می خواهید.

توجه داشته باشید که پرش از فضای سفید فقط برای فضای داخلی این سازه اعمال می شود. باید وجود داشته باشد
بین هیچ یک از کاراکترهایی که «(?[») اولیه را تشکیل می دهند، فاصله وجود نداشته باشد
بین کاراکترهای بسته شدن "])" فاصله باشد.

درست مانند تمام عبارات منظم، الگو را می توان با گنجاندن متغیرها ساخت
که در زمان کامپایل regex درون یابی می شوند. باید مراقب باشید تا اطمینان حاصل شود که شما
آنچه را که انتظار دارید بدست می آورند مثلا:

my $thai_or_lao = '\p{تایلندی} + \p{لائو}';
...
qr/(?[ \p{Digit} & $thai_or_lao ])/;

کامپایل می کند به

qr/(?[ \p{رقم} & \p{تایلندی} + \p{لائو} ])/;

اما این تأثیری را که کسی که کد را می‌خواند احتمالاً انتظار دارد ندارد، همانطور که
تقاطع فقط برای "\p{Thai}"، به استثنای لائوس اعمال می شود. دام هایی مثل این
می توان با پرانتز کردن قطعات جزء اجتناب کرد:

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

اما هر تغییر دهنده همچنان برای همه اجزا اعمال می شود:

my $lower = '\p{Lower} + \p{Digit}';
qr/(?[ \p{یونانی} & $lower ])/i;

با حروف بزرگ مطابقت دارد شما می توانید با ساخت اجزاء از شگفتی جلوگیری کنید
نمونه هایی از این ساختار با کامپایل کردن آنها:

$thai_or_lao = qr/(?[ \p{تایلندی} + \p{لائو} ])/;
my $lower = qr/(?[ \p{Lower} + \p{Digit} ])/;

هنگامی که اینها در الگوی دیگری جاسازی می شوند، آنچه مطابقت دارند، صرف نظر از آن تغییر نمی کند
پرانتز کردن یا اینکه چه اصلاح‌کننده‌هایی در آن الگوی بیرونی مؤثر هستند.

با توجه به روشی که پرل اشیا را تجزیه می کند، ممکن است پرانتز و براکت شما نیاز داشته باشد
متعادل، حتی از جمله نظرات. اگر به نمونه ای برخورد کردید، لطفاً آنها را به آدرس زیر بفرستید
"[ایمیل محافظت شده]"، تا بتوانیم یک مثال عینی برای این صفحه مرد داشته باشیم.

ممکن است آن را طوری تغییر دهیم که چیزهایی که استفاده قانونی می‌کنند در نویسه پرانتز معمولی باقی بمانند
ممکن است کلاس ها در این ساختار تجربی غیرقانونی شوند. یک پیشنهاد، برای
به عنوان مثال، ممنوع کردن استفاده های مجاور از یک کاراکتر است، مانند "(?[ [aa] ])". در
انگیزه چنین تغییری این است که این استفاده احتمالاً اشتباه تایپی است، همانطور که "a" دوم اضافه می کند
هیچ چی.

از perlrecharclass به صورت آنلاین با استفاده از خدمات onworks.net استفاده کنید


سرورها و ایستگاه های کاری رایگان

دانلود برنامه های ویندوز و لینوکس

دستورات لینوکس

Ad