هذا هو الأمر perlrecharclass الذي يمكن تشغيله في موفر الاستضافة المجاني OnWorks باستخدام إحدى محطات العمل المجانية المتعددة عبر الإنترنت مثل Ubuntu Online أو Fedora Online أو محاكي Windows عبر الإنترنت أو محاكي MAC OS عبر الإنترنت
برنامج:
اسم
perlrecharclass - فئات أحرف التعبير العادي لـ Perl
الوصف
تم العثور على وثائق المستوى الأعلى حول تعبيرات Perl العادية في perlre.
تناقش هذه الصفحة اليدوية بناء الجملة واستخدام فئات الأحرف في لغة Perl العادية
التعبيرات.
فئة الأحرف هي وسيلة للدلالة على مجموعة من الأحرف بطريقة تجعلها واحدة
تتم مطابقة شخصية المجموعة. من المهم أن تتذكر ذلك: مطابقة الشخصية
تستهلك الفئة حرفًا واحدًا بالضبط في السلسلة المصدر. (السلسلة المصدر هي
سلسلة تتم مطابقة التعبير العادي معها.)
هناك ثلاثة أنواع من فئات الأحرف في تعبيرات Perl العادية: النقطة، والشرطة المائلة العكسية
تسلسل، والنموذج بين قوسين معقوفين. ومع ذلك، ضع في اعتبارك أنه في كثير من الأحيان
يُستخدم مصطلح "فئة الأحرف" للإشارة إلى النموذج الموجود بين قوسين فقط. بالتأكيد، معظم بيرل
التوثيق يفعل ذلك.
ال نقطة
النقطة (أو الفترة)، "." ربما يكون الأكثر استخدامًا، وبالتأكيد الأكثر شهرة
فئة الشخصية. بشكل افتراضي، تتطابق النقطة مع أي حرف، باستثناء السطر الجديد. الذي - التي
يمكن تغيير الإعداد الافتراضي لإضافة مطابقة السطر الجديد باستخدام عزباء خط المعدل:
إما للتعبير العادي بأكمله باستخدام المُعدِّل "/s"، أو محليًا باستخدام "(?s)".
(يتطابق تسلسل الشرطة المائلة العكسية "\N"، الموضح أدناه، مع أي حرف باستثناء السطر الجديد
دون النظر إلى عزباء خط المعدل.)
وهنا بعض الأمثلة:
"أ" =~ /./ # مباراة
"." =~ /./ # مباراة
"" =~ /./ # لا يوجد تطابق (يجب أن تتطابق النقطة مع الحرف)
"\ن" =~ /./ # لا يوجد تطابق (النقطة لا تتطابق مع السطر الجديد)
"\n" =~ /./s # Match (معدل "سطر واحد" عالمي)
"\n" =~ /(?s:.)/ # Match (مُعدِّل "سطر واحد" محلي)
"ab" =~ /^.$/ # لا يوجد تطابق (النقطة تطابق حرفًا واحدًا)
مائل متواليات
تسلسل الشرطة المائلة العكسية عبارة عن سلسلة من الأحرف، أولها عبارة عن شرطة مائلة عكسية.
ينسب بيرل معنى خاصًا للعديد من هذه التسلسلات، وبعضها عبارة عن شخصية
الطبقات. أي أنها تتطابق مع حرف واحد لكل منها، بشرط أن ينتمي الحرف
إلى مجموعة محددة من الأحرف المحددة بواسطة التسلسل.
فيما يلي قائمة بتسلسلات الشرطة المائلة العكسية التي تمثل فئات الأحرف. تتم مناقشتها
بمزيد من التفاصيل أدناه. (بالنسبة لتسلسلات الشرطة المائلة العكسية التي ليست فئات أحرف، راجع
بيرلريباكسسلاش.)
\d مطابقة حرف مكون من رقم عشري.
\D تطابق حرف غير عشري.
\w مطابقة حرف "كلمة".
\W يطابق حرفًا غير "كلمة".
\s تطابق حرف المسافة البيضاء.
\S يطابق حرفًا لا يحتوي على مسافة بيضاء.
\h مطابقة حرف مسافة بيضاء أفقية.
\H قم بمطابقة حرف ليس به مسافة بيضاء أفقية.
\v مطابقة حرف المسافة البيضاء الرأسية.
\V قم بمطابقة حرف ليس به مسافة بيضاء رأسية.
\N قم بمطابقة حرف ليس سطرًا جديدًا.
\pP, \p{Prop} يطابق الحرف الذي له خاصية Unicode المحددة.
\PP, \P{Prop} يتطابق مع حرف لا يحتوي على خاصية Unicode
\N
"\N"، المتوفر بدءًا من الإصدار 5.12، مثل النقطة، يطابق أي حرف ليس بـ
خط جديد. الفرق هو أن "\N" لا يتأثر بـ عزباء خط منتظم
معدل التعبير (انظر "النقطة" أعلاه). لاحظ أن النموذج "\N{...}" قد يعني
شيء مختلف تمامًا. عندما يكون "{...}" محددًا كميًا، فهذا يعني مطابقة أ
شخصية غير السطر الجديد عدة مرات. على سبيل المثال، "\N{3}" يعني مطابقة 3 غير
خطوط جديدة؛ "\N{5,}" تعني مطابقة 5 أو أكثر من الأسطر غير الجديدة. ولكن إذا كان "{...}" ليس قانونيًا
محدد الكمية، فمن المفترض أن يكون حرف مسمى. انظر الألقاب لهؤلاء. ل
على سبيل المثال، لا يحتوي أي من "\N{COLON}" و"\N{4F}" و"\N{F4}" على محددات كمية قانونية، لذا فإن Perl
سيحاول العثور على الأحرف التي تكون أسماؤها على التوالي "COLON" و"4F" و"F4".
أرقام
"\d" يتطابق مع حرف واحد يعتبر رقمًا عشريًا أرقام. إذا كان "/ أ" منتظمًا
معدل التعبير ساري المفعول، ويطابق [0-9]. وإلا فإنه يطابق أي شيء
يتطابق مع "\p{Digit}"، والذي يتضمن [0-9]. (الاستثناء المحتمل غير المحتمل هو ذلك
بموجب قواعد مطابقة الإعدادات المحلية، قد لا تحتوي اللغة الحالية على "[0-9]" مطابقة لـ "\d"،
و/أو قد يتطابق مع أحرف أخرى تكون نقطة رمزها أقل من 256. الوحيد من هذا القبيل
التعريفات المحلية القانونية ستكون مطابقة "[0-9]" بالإضافة إلى مجموعة أخرى من 10
أحرف أرقام متتالية؛ أي شيء آخر سيكون انتهاكًا للغة C
قياسي، لكن بيرل لا تفترض حاليًا أي شيء فيما يتعلق بهذا.)
ما يعنيه هذا هو أنه ما لم يكن المُعدِّل "/a" ساري المفعول، فإن "\d" لا يطابق فقط
الأرقام من '0' إلى '9'، ولكن أيضًا العربية والديفاناغاري وأرقام من لغات أخرى. هذا ممكن
يسبب بعض الارتباك، وبعض القضايا الأمنية.
تبدو بعض الأرقام التي تطابق "\d" مثل بعض الأرقام [0-9]، ولكن لها قيم مختلفة.
على سبيل المثال، الرقم البنغالي رقم أربعة (U+09EA) يشبه إلى حد كبير الرقم ثمانية من ASCII
(ش+0038). قد يتم تضليل التطبيق الذي يتوقع أرقام ASCII فقط، أو إذا
المطابقة هي "\d+"، وقد تحتوي السلسلة المطابقة على خليط من الأرقام من أرقام مختلفة
أنظمة الكتابة التي تبدو وكأنها تشير إلى رقم مختلف عما تفعله بالفعل.
"الأسطوانات ()"في Unicode::UCD يمكن استخدامه لحساب القيمة بأمان، وإرجاع "undef" إذا
تحتوي سلسلة الإدخال على مثل هذا الخليط.
ما يعنيه "\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 DIGIT ONE" أو الحروف السفلية، أو هي من الكتابة
الأنظمة التي تفتقر إلى جميع الأرقام العشرة.
هدف التصميم هو أن يتطابق "\d" تمامًا مع مجموعة الأحرف التي يمكن أن تكون بأمان
يُستخدم مع الصيغة العشرية الموضعية ذات النهاية الكبيرة "العادية"، حيث، على سبيل المثال، 123 يعني واحدًا
"مائة"، بالإضافة إلى "عشرتين"، بالإضافة إلى ثلاثة "آحاد". هذا التدوين الموضعي لا
تنطبق بالضرورة على الأحرف التي تطابق النوع الآخر من "الأرقام"،
"\p{Numeric_Type=Digit}"، وبالتالي فإن "\d" لا يتطابق معها.
يمكن أيضًا استخدام الأرقام التاميلية (U+0BE6 - U+0BEF) بشكل قانوني في الأرقام التاميلية القديمة في
والتي لن تظهر أكثر من واحدة على التوالي، مفصولة بأحرف تعني ذلك
"مرات 10"، "مرات 100"، وما إلى ذلك (انظرhttp://www.unicode.org/notes/tn21>.)
أي حرف لا يطابقه "\d" يطابقه "\D".
كلمة الأحرف
يطابق "\w" حرفًا أبجديًا رقميًا واحدًا (حرف أبجدي أو علامة عشرية
رقم)؛ أو حرف ترقيم متصل، مثل الشرطة السفلية ("_")؛ أو "علامة"
الشخصية (مثل نوع من اللهجة) التي ترتبط بأحد هؤلاء. لا يتطابق أ
الكلمة بالكامل. لمطابقة كلمة كاملة، استخدم "\w+". هذا ليس نفس الشيء مثل مطابقة
كلمة إنجليزية، ولكن في نطاق ASCII فهي نفس سلسلة معرف Perl
حرفا.
إذا كان المعدل "/a" ساري المفعول ...
"\w" يتطابق مع 63 حرفًا [a-zA-Z0-9_].
خلاف ذلك ...
لنقاط الكود فوق 255 ...
يتطابق "\w" مع نفس تطابقات "\p{Word}" في هذا النطاق. أي أنه يتطابق
الحروف التايلاندية، والأحرف اليونانية، وما إلى ذلك. وهذا يشمل علامات الترقيم الموصلة (مثل
الشرطة السفلية) التي تربط كلمتين معًا، أو علامات التشكيل، مثل "COMBINING
TILDE" والأحرف المعدلة، والتي تستخدم بشكل عام لإضافة الحروف المساعدة
علامات على الحروف.
لنقاط الكود أقل من 256 ...
إذا كانت القواعد المحلية سارية ...
يتطابق "\w" مع الشرطة السفلية الأصلية للنظام بالإضافة إلى أي شيء
تعتبر اللغة أبجدية رقمية.
إذا كانت قواعد Unicode سارية ...
يتطابق "\w" تمامًا مع ما يطابقه "\p{Word}".
خلاف ذلك ...
"\w" يطابق [a-zA-Z0-9_].
يتم تحديد القواعد المطبقة كما هو موضح في "معدل مجموعة الأحرف الموجود
تأثير؟" في بيرل.
يوجد عدد من المشكلات الأمنية المتعلقة بقائمة 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".
بيضاء
يتطابق "\s" مع أي حرف منفرد يعتبر مسافة بيضاء.
إذا كان المعدل "/a" ساري المفعول ...
في كافة إصدارات Perl، يتطابق "\s" مع الأحرف الخمسة [\t\n\f\r ]؛ وهذا هو
علامة التبويب الأفقية، والسطر الجديد، وتغذية النموذج، ورجوع السطر، والمسافة.
بدءًا من الإصدار 5.18 من Perl، فإنه يطابق أيضًا علامة التبويب الرأسية "\cK". انظر الملاحظة "[1]" أدناه
لمناقشة هذا.
خلاف ذلك ...
لنقاط الكود فوق 255 ...
يتطابق "\s" تمامًا مع نقاط الكود أعلاه 255 الموضحة بعمود "s" في
الجدول أدناه.
لنقاط الكود أقل من 256 ...
إذا كانت القواعد المحلية سارية ...
يتطابق "\s" مع كل ما تعتبره الإعدادات المحلية مسافة بيضاء.
إذا كانت قواعد Unicode سارية ...
يتطابق "\s" تمامًا مع الأحرف الموضحة في العمود "s" في الجدول
أدناه.
خلاف ذلك ...
"\s" يطابق [\t\n\f\r ] وبدءًا من Perl v5.18، علامة التبويب العمودية "\cK".
(راجع الملاحظة "[1]" أدناه لمناقشة هذا الأمر.) لاحظ أن هذه القائمة لا تحتوي على ذلك
تشمل المساحة غير القابلة للكسر.
يتم تحديد القواعد المطبقة كما هو موضح في "معدل مجموعة الأحرف الموجود
تأثير؟" في بيرل.
أي حرف لا يطابقه "\s" يطابقه "\S".
"\h" يطابق أي حرف يعتبر مسافة بيضاء أفقية؛ وهذا يشمل المنصة
أحرف المسافة وعلامة التبويب والعديد من الأحرف الأخرى المدرجة في الجدول أدناه. "\H" يطابق أيًا منها
الحرف لا يعتبر مسافة بيضاء أفقية. يستخدمون الطابع الأصلي للمنصة
تعيين، ولا تأخذ في الاعتبار أي لغة قد تكون قيد الاستخدام.
"\v" يطابق أي حرف يعتبر مسافة بيضاء رأسية؛ وهذا يشمل المنصة
أحرف إرجاع السطر وتغذية الأسطر (السطر الجديد) بالإضافة إلى العديد من الأحرف الأخرى، كلها
المدرجة في الجدول أدناه. "\V" يطابق أي حرف لا يعتبر مسافة بيضاء رأسية.
إنهم يستخدمون مجموعة الأحرف الأصلية للنظام الأساسي، ولا يأخذون في الاعتبار أي لغة محلية قد تفعل ذلك
وإلا تكون قيد الاستخدام.
يطابق "\R" أي شيء يمكن اعتباره سطرًا جديدًا بموجب قواعد Unicode. يمكن أن تتطابق مع أ
تسلسل متعدد الأحرف. ولا يمكن استخدامه داخل فئة أحرف بين قوسين؛ استخدم "\v"
بدلاً من ذلك (مسافة بيضاء عمودية). فهو يستخدم مجموعة الأحرف الأصلية للنظام الأساسي، ولا يفعل ذلك
ضع في اعتبارك أي لغة قد تكون قيد الاستخدام. تتم مناقشة التفاصيل في
com.perlrebackslash.
لاحظ أنه على عكس "\s" (و"\d" و"\w")، فإن "\h" و"\v" يتطابقان دائمًا مع نفس الأحرف،
بغض النظر عن عوامل أخرى، مثل اللغة النشطة أو ما إذا كانت السلسلة المصدر
بتنسيق UTF-8.
قد يعتقد المرء أن "\s" يعادل "[\h\v]". هذا صحيح بالفعل بدءًا من لغة Perl
الإصدار 5.18، ولكن قبل ذلك، كان الاختلاف الوحيد هو أن علامة التبويب العمودية ("\cK") لم تكن كذلك
متطابقة مع "\s".
الجدول التالي عبارة عن قائمة كاملة بالأحرف المطابقة لـ "\s" و"\h" و"\v".
يونيكود 6.3.
يعطي العمود الأول نقطة رمز Unicode للحرف (بتنسيق سداسي عشري)، والثاني
يعطي العمود اسم (Unicode). ويشير العمود الثالث إلى الفئة (الفئات) التي سيتم بها
الحرف مطابق (بافتراض عدم وجود لغة محلية تؤدي إلى تغيير مطابقة "\s").
0x0009 جدولة الأحرف hs
0x000a تغذية الخط (LF) مقابل
جدولة الخط 0x000b مقابل [1]
0x000c تغذية النموذج (FF) مقابل
0x000d إرجاع النقل (CR) مقابل
0x0020 مسافة النظام المنسق
0x0085 السطر التالي (NEL) مقابل [2]
0x00a0 مسافة لا فاصل hs [2]
0x1680 علامة الفضاء أوغام hs
0x2000 إن رباعية النظام المنسق
0x2001 إم رباعية النظام المنسق
0x2002 في الفضاء النظام المنسق
0x2003 مساحة EM hs
0x2004 مسافة ثلاثة لكل EM hs
0x2005 مسافة أربعة لكل EM hs
0x2006 مسافة ستة لكل EM hs
0x2007 مساحة الشكل hs
0x2008 مسافة الترقيم hs
0x2009 مساحة رقيقة hs
0x200a مساحة الشعر hs
0x2028 فاصل الخط مقابل
0x2029 فاصل الفقرة مقابل
0x202f مساحة ضيقة بدون فاصل hs
0x205f الفضاء الرياضي المتوسط hs
0x3000 الفضاء الأيديولوجي hs
[1] قبل إصدار Perl v5.18، لم تكن "\s" تتطابق مع علامة التبويب الرأسية. "[^\S\cK]" (بشكل غامض)
يطابق ما يفعله "\s" تقليديًا.
[2] قد يتطابق السطر التالي والمسافة بدون فاصل مع "\s" وقد لا يتطابقان وفقًا للقواعد الواردة في
تأثير. انظر بداية هذا القسم.
يونيكود عقارات
"\pP" و"\p{Prop}" عبارة عن فئات أحرف لمطابقة الأحرف التي تناسب Unicode المحدد
ملكيات. يمكن استخدام أسماء الخصائص المكونة من حرف واحد في النموذج "\pP" مع الخاصية
الاسم الذي يلي "\p"، وإلا ستكون هناك حاجة إلى الأقواس. عند استخدام الأقواس، هناك
النموذج المفرد، وهو مجرد اسم الخاصية الموجود بين قوسين، والشكل المركب
والذي يبدو مثل "\p{name=value}"، وهو ما يعني مطابقة ما إذا كانت الخاصية "name" لـ
الشخصية لها تلك "القيمة" المحددة. على سبيل المثال، يمكن كتابة مطابقة لرقم
كـ "/\pN/" أو كـ "/\p{Number}/"، أو كـ "/\p{Number=True}/". تتم مطابقة الحروف الصغيرة
من قبل العقار الأحرف الصغيرة_Letter الذي لديه شكل قصير Ll. إنهم بحاجة إلى الأقواس، كذلك
مكتوبة كـ "/\p{Ll}/" أو "/\p{Lowercase_Letter}/"، أو
"/\p{ General_Category=Lowercase_Letter}/" (الشرطات السفلية اختيارية). "/\pLl/" هو
صحيح، ولكن يعني شيئا مختلفا. إنه يطابق سلسلة مكونة من حرفين: حرف
(خاصية Unicode "\pL")، متبوعة بحرف صغير "l".
إذا لم تكن القواعد المحلية سارية المفعول، فسيؤدي استخدام خاصية Unicode إلى فرض النظام
التعبير عن استخدام قواعد Unicode، إذا لم يكن الأمر كذلك بالفعل.
لاحظ أن جميع الخصائص تقريبًا محصنة ضد المطابقة غير الحساسة لحالة الأحرف. أي إضافة
لا يغير معدل التعبير العادي "/i" ما يطابقه. هناك مجموعتان
التي تتأثر. المجموعة الأولى هي "Uppercase_Letter"، و"Lowercase_Letter"، و
"Titlecase_Letter"، وكلها تتطابق مع "Cased_Letter" ضمن مطابقة "/i". المجموعة الثانية
هي "أحرف كبيرة" و"أحرف صغيرة" و"أحرف عنوان"، وجميعها تتطابق مع "حالة الأحرف" ضمن "/i"
مطابقة. (الفرق بين هذه المجموعات هو أن بعض الأشياء، مثل الأرقام الرومانية،
تأتي بالأحرف الكبيرة والصغيرة، لذا فهي "مغلفة"، ولكن لا تعتبر كذلك
الحروف، لذا فهي ليست رسائل "Cased_Letter". إنهم في الواقع "Letter_Number".) هذه المجموعة
يتضمن أيضًا مجموعتيه الفرعيتين "PosixUpper" و"PosixLower"، وكلاهما متطابق ضمن "/i"
"بوسيكس ألفا".
لمزيد من التفاصيل حول خصائص Unicode، راجع "خصائص أحرف Unicode" في perlunicode؛
للحصول على قائمة كاملة بالخصائص المحتملة، راجع "الخصائص التي يمكن الوصول إليها من خلال \p{} و
\P{}" في perluniprops، والذي يشير إلى جميع النماذج التي تحتوي على اختلافات "/i".
ممكن لتحديد الممتلكات الخاصة بك. تمت مناقشة هذا في "الحرف المحدد من قبل المستخدم".
خصائص" في perlunicode.
يتم تعريف خصائص Unicode (مفاجأة!) فقط على نقاط كود Unicode. يبدأ في
الإصدار 5.20، عند المطابقة مع "\p" و"\P"، تعالج لغة Perl نقاط التعليمات البرمجية غير Unicode (تلك
أعلى من الحد الأقصى القانوني لـ Unicode وهو 0x10FFFF) كما لو كانت Unicode نموذجية غير مخصصة
نقاط الكود.
قبل الإصدار 5.20، أصدر Perl تحذيرًا وجعل جميع المطابقات تفشل في التعليمات البرمجية غير Unicode
نقاط. قد يكون هذا مفاجئًا إلى حد ما:
مركز حقوق الإنسان(0x110000) =~ \p{ASCII_Hex_Digit=True} # فشل في Perls < v5.20.
مركز حقوق الإنسان(0x110000) =~ \p{ASCII_Hex_Digit=False} # فشل أيضًا في Perls
# < الإصدار 5.20
على الرغم من أنه يمكن اعتبار هاتين المطابقتين مكملتين، إلا أنهما كانتا كذلك حتى الإصدار 5.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"
"س" أو "ش". مثل فئات الأحرف الأخرى، تتم مطابقة حرف واحد بالضبط.* للمطابقة
سلسلة أطول تتكون من الأحرف المذكورة في فئة الأحرف، اتبع
فئة الحرف مع محدد الكمية. على سبيل المثال، "[aeiou]+" يطابق حرفًا صغيرًا واحدًا أو أكثر
حروف العلة الإنجليزية.
تكرار الحرف في فئة الحرف ليس له أي تأثير؛ يعتبر موجودًا في المجموعة
مرة واحدة فقط.
أمثلة:
"e" =~ /[aeiou]/ # مطابقة، حيث أن "e" مدرج في الفصل.
"p" =~ /[aeiou]/ # لا يوجد تطابق، "p" غير مدرج في الفصل.
"ae" =~ /^[aeiou]$/ # لا يوجد تطابق، فئة الأحرف متطابقة فقط
#حرف واحد.
"ae" =~ /^[aeiou]+$/ # مطابقة بسبب مُحدِّد الكمية.
-------
* هناك استثناءان لفئة أحرف بين قوسين تتطابق مع حرف واحد
فقط. يتطلب كل منها معالجة خاصة بواسطة Perl لإنجاح الأمور:
· عندما يتطابق الفصل بدون حالة ضمن قواعد المطابقة "/i"، والحرف الذي
المذكور صراحةً داخل الفصل يتطابق مع تسلسل متعدد الأحرف
بدون حالة وفقًا لقواعد Unicode، سيطابق الفصل أيضًا هذا التسلسل. على سبيل المثال،
يقول Unicode أن الحرف "LATIN SMALL LETTER SHARP S" يجب أن يتطابق مع التسلسل
"ss" ضمن قواعد "/i". هكذا،
'ss' =~ /\A\N{LATIN SMALL LETTER SHARP S}\z/i # Matches
'ss' =~ /\A[aeioust\N{LATIN SMALL LETTER SHARP S}]\z/i # Matches
لكي يحدث هذا، يجب ألا يكون الفصل مقلوبًا (انظر "النفي") والحرف
يجب أن يتم تحديدها بشكل صريح، وألا تكون جزءًا من نطاق متعدد الأحرف (ولا حتى مثل
أحد أطرافه). ("سيتم شرح نطاقات الأحرف" قريبًا.) لذلك،
'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{TAMIL LETTER KA}\N{TAMIL VOWEL SIGN AU}"
=~ / ^ [\N{TAMIL SYLLABLE KAU}] $ /x;
التطابقات، لأن "\N{TAMIL SYLLABLE KAU}" هو تسلسل مسمى يتكون من الاثنين
الشخصيات المتطابقة ضد. مثل المثيل الآخر حيث يمكن أن تتطابق فئة بين قوسين
أحرف متعددة، ولأسباب مماثلة، يجب عدم عكس الفئة، و
قد لا يظهر التسلسل المسمى في نطاق، حتى في النطاق الذي يكون فيه كلا نقطتي النهاية. لو
يحدث هذا، وهو خطأ فادح إذا كانت فئة الأحرف ضمن نطاق ممتد
"(؟[...])" فصل؛ ويتم استخدام نقطة الرمز الأولى فقط (مع تحذير من نوع "regexp".
مرفوعاً) بخلاف ذلك.
ملصقات خاصة الشخصيات في الداخل a بين قوسين حرف الفئه
معظم الأحرف التي تعتبر أحرفًا تعريفية في التعبيرات العادية (أي الأحرف التي
تحمل معنى خاصًا مثل "." أو "*" أو "(") تفقد معناها الخاص ويمكن استخدامها
داخل فئة الأحرف دون الحاجة إلى الهروب منها. على سبيل المثال، يتطابق "[()]".
إما قوس فتح، أو قوس إغلاق، والأقواس داخل
فئة الشخصية لا يتم تجميعها أو التقاطها.
الأحرف التي قد تحمل معنى خاصًا داخل فئة الأحرف هي: "\"، "^"، "-"،
"[" و"]"، ويتم مناقشتها أدناه. يمكن الهروب منهم بخط مائل عكسي، على الرغم من أن هذا
لا تكون هناك حاجة إليها في بعض الأحيان، وفي هذه الحالة قد يتم حذف الشرطة المائلة العكسية.
التسلسل "\b" خاص داخل فئة الأحرف بين قوسين. بينما خارج
فئة الأحرف، "\b" هو تأكيد يشير إلى نقطة لا تحتوي على أي منهما
أحرف كلمة أو حرفين غير كلمة على كلا الجانبين، داخل حرف بين قوسين
فئة، "\b" يطابق حرف مسافة للخلف.
التسلسلات "\a"، "\c"، "\e"، "\f"، "\n"، "\N{اسم}"، "\N{U+عرافة شار}"و "\r" و"\t" و
"\x" هي أيضًا خاصة ولها نفس المعاني كما هي الحال خارج الحرف الموجود بين قوسين
فئة.
أيضًا، تعتبر الشرطة المائلة العكسية المتبوعة برقمين أو ثلاثة أرقام ثمانية عددًا ثمانيًا.
"[" ليس خاصًا داخل فئة الأحرف، إلا إذا كان بداية حرف POSIX
فئة (انظر "فئات أحرف POSIX" أدناه). عادة لا تحتاج إلى الهروب.
عادةً ما يكون "]" نهاية فئة أحرف POSIX (راجع "فئات أحرف POSIX"
أدناه)، أو يشير إلى نهاية فئة الأحرف الموجودة بين قوسين. إذا كنت ترغب في تضمين أ
"]" في مجموعة الأحرف، يجب عليك الهروب منها بشكل عام.
ومع ذلك، إذا كان "]" هو أول (أو الثاني إذا كان الحرف الأول عبارة عن علامة إقحام)
حرف فئة الأحرف بين قوسين، فهو لا يشير إلى نهاية الفصل (كما هو الحال بالنسبة لك
لا يمكن أن تحتوي على فئة فارغة) وتعتبر جزءًا من مجموعة الأحرف التي يمكن أن تكون
متطابقة دون الهروب.
أمثلة:
"+" =~ /[+?*]/ # المطابقة، "+" في فئة الأحرف ليست خاصة.
"\cH" =~ /[\b]/ # مطابقة، \b داخل فئة الأحرف
# يعادل مسافة للخلف.
"]" =~ /[][]/ # مطابقة كما تحتوي فئة الأحرف
# كلاهما و ].
"[]" =~ /[[]]/ # مطابقة، يحتوي النمط على فئة أحرف
# يحتوي فقط على [، وفئة الحرف هي
# متبوعة ب ].
حرف نطاقات
ليس من غير المألوف أن ترغب في مطابقة مجموعة من الشخصيات. لحسن الحظ، بدلا من سرد كافة
الأحرف الموجودة في النطاق، يمكن للمرء استخدام الواصلة ("-"). إذا كان داخل حرف بين قوسين
فئة تحتوي على حرفين مفصولين بواصلة، ويتم التعامل معها كما لو كانت جميع الأحرف
بين الاثنين كانوا في الصف. على سبيل المثال، "[0-9]" يطابق أي رقم ASCII، و
"[am]" يطابق أي حرف صغير من النصف الأول من أبجدية ASCII.
لاحظ أن الحرفين الموجودين على جانبي الواصلة ليسا بالضرورة كلا الحرفين
أو كلا الرقمين. أي شخصية ممكنة، على الرغم من أنه ليس من المستحسن. "['-؟]" يحتوي على
مجموعة من الشخصيات، ولكن معظم الناس لن يعرفوا أي الحروف يعني ذلك.
علاوة على ذلك، قد تؤدي هذه النطاقات إلى مشاكل في قابلية النقل إذا كان يجب تشغيل التعليمات البرمجية على جهاز
النظام الأساسي الذي يستخدم مجموعة أحرف مختلفة، مثل EBCDIC.
إذا كانت الواصلة في فئة الأحرف لا يمكن أن تكون جزءًا من نطاق، على سبيل المثال، من الناحية النحوية
لأنه هو الحرف الأول أو الأخير من فئة الحرف، أو إذا كان على الفور
يتبع نطاقًا، فإن الواصلة ليست خاصة، وبالتالي تعتبر حرفًا يجب مطابقته
حرفياً. إذا كنت تريد مطابقة الواصلة في مجموعة الأحرف الخاصة بك وموضعها
في الفصل بحيث يمكن اعتباره جزءًا من نطاق، يجب عليك الهروب من ذلك
واصلة مع شرطة مائلة للخلف.
أمثلة:
[az] # يطابق الحرف الذي هو حرف ASCII صغير.
[a-fz] # يطابق أي حرف بين "a" و"f" (ضمنًا) أو
#حرف "ز".
[-z] # يطابق إما الواصلة ('-') أو الحرف 'z'.
[afm] # يطابق أي حرف بين "a" و"f" (ضمنًا)، و
# واصلة ('-')، أو الحرف 'm'.
['-?] # يطابق أيًا من الأحرف '()*+,-./0123456789:;<=>?
# (لكن ليس على منصة EBCDIC).
[\N{APOSTROPHE}-\N{علامة الاستفهام}]
# يطابق أيًا من الأحرف '()*+,-./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".
يتم رفعه ضمن "استخدام إعادة 'صارم'" إذا تم تحديد نقطة النهاية الأخرى بشكل غير قابل للنقل:
[\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]" يطابق الأرقام العشرة. النطاقات الفرعية، مثل "[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
حرفي، مثل "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")؛ خاص
# لا ينطبق التعامل لأن النطاق مختلط
# قضية
والنفي
من الممكن أيضًا إدراج الأحرف التي لا تريد مطابقتها بدلاً من ذلك. يمكنك أن تفعل ذلك
باستخدام علامة الإقحام ("^") كالحرف الأول في فئة الأحرف. على سبيل المثال،
"[^az]" يطابق أي حرف ليس حرف ASCII صغيرًا، وبالتالي
يتضمن أكثر من مليون نقطة كود Unicode. يقال أن الفصل "مرفوض" أو
"معكوسة".
بناء الجملة هذا يجعل علامة الإقحام حرفًا خاصًا داخل فئة أحرف بين قوسين، ولكن
فقط إذا كان هو الحرف الأول من الفصل. لذا، إذا كنت تريد علامة الإقحام كواحدة من
الأحرف المراد مطابقتها، إما الهروب من علامة الإقحام أو عدم إدراجها أولاً.
في فئات الأحرف بين قوسين معكوسين، يتجاهل Perl قواعد Unicode التي تقول عادةً
هذا التسلسل المسمى، ويجب أن تتطابق أحرف معينة مع تسلسل من أحرف متعددة
استخدم ضمن مطابقة "/i" بدون حالة. قد يؤدي اتباع هذه القواعد إلى إرباك كبير
مواقف:
"ss" =~ /^[^\xDF]+$/ui; # اعواد الكبريت!
يجب أن يتطابق هذا مع أي تسلسلات من الأحرف غير "\xDF" أو ما يطابق "\xDF".
تحت "/ أنا". "s" ليس "\xDF"، لكن Unicode يقول أن "ss" هو ما يطابقه "\xDF"
"/أنا". إذن أي واحد "يفوز"؟ هل تفشل في المطابقة لأن السلسلة تحتوي على "ss" أم تقبلها
لأنه يحتوي على "s" متبوعًا بـ "s" أخرى؟ لقد اختار بيرل الخيار الأخير. (انظر الملاحظة في
"فئات الأحرف بين قوسين" أعلاه.)
أمثلة:
"e" =~ /[^aeiou]/ # لا يوجد تطابق، تم إدراج 'e'.
"x" =~ /[^aeiou]/ # تطابق، لأن 'x' ليس حرفًا متحركًا صغيرًا.
"^" =~ /[^^]/ # لا يوجد تطابق، يطابق أي شيء لا يمثل علامة إقحام.
"^" =~ /[x^]/ # مطابقة، علامة الإقحام ليست خاصة هنا.
مائل متواليات
يمكنك وضع أي فئة أحرف لتسلسل الشرطة المائلة العكسية (باستثناء "\N" و"\R")
داخل فئة أحرف بين قوسين، وسيعمل تمامًا كما لو كنت قد وضعت كل الأحرف
يتطابق مع تسلسل الشرطة المائلة العكسية داخل فئة الأحرف. على سبيل المثال، "[af\d]"
يطابق أي رقم عشري، أو أي من الأحرف الصغيرة بين "a" و"f" ضمنًا.
"\N" ضمن فئة الأحرف بين قوسين يجب أن يكون بالصيغة "\N{اسم}" أو "\N{U+عرافة
شار}"، وألا يكون النموذج الذي يطابق الأسطر غير الجديدة، لنفس سبب النقطة "."
داخل فئة الأحرف بين قوسين تفقد معناها الخاص: فهي تتطابق مع أي شيء تقريبًا،
وهذا بشكل عام ليس ما تريد أن يحدث.
أمثلة:
/[\p{Thai}\d]/ # يطابق حرفًا تايلانديًا
# حرف أو رقم.
/[^\p{Arabic}()]/ # يطابق حرفًا ليس باللغة العربية
# حرف، ولا قوسين.
لا يمكن أن تشكل فئات أحرف تسلسل الشرطة المائلة العكسية إحدى نقاط النهاية للنطاق. هكذا،
لا يمكنك أن تقول:
/[\p{Thai}-\d]/ # خطأ!
POSIX حرف فصول دراسية
فئات أحرف POSIX لها النموذج "[:class:]"، حيث فئة هو الاسم، و"[:"
و ":]" المحددات. تظهر فئات أحرف POSIX فقط في الداخل حرف بين قوسين
الفئات، وهي طريقة ملائمة ووصفية لإدراج مجموعة من الشخصيات.
كن حذرا بشأن بناء الجملة،
# صحيح:
$string =~ /[[:alpha:]]/
# غير صحيح (سوف يحذر):
سلسلة $ =~ /[:alpha:]/
سيكون النمط الأخير عبارة عن فئة أحرف تتكون من نقطتين، والأحرف "a"،
"ل" و"ع" و"ح".
يمكن أن تكون فئات أحرف POSIX جزءًا من فئة أحرف أكبر بين قوسين. على سبيل المثال،
[01[:alpha:]%]
صالح ويطابق "0" و"1" وأي حرف أبجدي وعلامة النسبة المئوية.
يتعرف Perl على فئات أحرف POSIX التالية:
ألفا أي حرف أبجدي ("[A-Za-z]").
alnum أي حرف أبجدي رقمي ("[A-Za-z0-9]").
ascii أي حرف في مجموعة أحرف ASCII.
فارغ امتداد GNU، يساوي مسافة أو علامة تبويب أفقية ("\t").
Cntrl أي حرف تحكم. انظر الملاحظة [2] أدناه.
digit أي رقم عشري ("[0-9]")، يعادل "\d".
رسم بياني أي حرف قابل للطباعة، باستثناء المسافة. انظر الملاحظة [3] أدناه.
أقل أي حرف صغير ("[az]").
طباعة أي حرف قابل للطباعة، بما في ذلك المسافة. انظر الملاحظة [4] أدناه.
نقطة أي حرف رسومي باستثناء أحرف "الكلمة". ملاحظة [5].
مسافة أي حرف مسافة بيضاء. "\s" بما في ذلك علامة التبويب العمودية
("\cK").
العلوي أي حرف كبير ("[AZ]").
الكلمة امتداد Perl ("[A-Za-z0-9_]")، أي ما يعادل "\w".
xdigit أي رقم سداسي عشري ("[0-9a-fA-F]").
مثل خصائص Unicode، فإن معظم خصائص POSIX تتطابق مع نفسها بغض النظر عن ذلك
ما إذا كانت المطابقة غير الحساسة لحالة الأحرف ("/i") سارية أم لا. الاستثناءان هما
"[:upper:]" و"[:lower:]". ضمن "/i"، يتطابق كل منهما مع اتحاد "[:upper:]" و
"[:أدنى:]".
تحتوي معظم فئات أحرف POSIX على نظيرين للخاصية "\p" على نمط Unicode. (هم
ليست خصائص Unicode الرسمية، ولكن امتدادات Perl مشتقة من Unicode الرسمي
Properties.) يوضح الجدول أدناه العلاقة بين فئات أحرف POSIX وهذه
نظرائه.
أحد النظيرين، في العمود المسمى "ASCII-range Unicode" في الجدول، يتطابق فقط
الأحرف في مجموعة أحرف ASCII.
النظير الآخر، في العمود المسمى "Full-range Unicode"، يطابق أيًا منها
الأحرف المناسبة في مجموعة أحرف Unicode الكاملة. على سبيل المثال، "\p{Alpha}"
لا يتطابق مع أحرف ASCII الأبجدية فحسب، بل يطابق أي حرف في Unicode بأكمله
مجموعة الأحرف تعتبر أبجدية. إدخال في العمود المسمى "تسلسل الشرطة المائلة العكسية"
هو ما يعادل (قصيرة).
[[:...:]] ملاحظة بخط مائل عكسي كامل النطاق لنطاق ASCII
تسلسل يونيكود يونيكود
-------------------------------------------------- ---
ألفا \p{PosixAlpha} \p{XPosixAlpha}
ألنوم \p{PosixAlnum} \p{XPosixAlnum}
أسكي \ص {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}
طباعة \p{PosixPrint} \p{XPosixPrint} [4]
نقطة \p{PosixPunct} \p{XPosixPunct} [5]
\p{PerlSpace} \p{XPerlSpace} \s [6]
مساحة \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] لا تنتج أحرف التحكم مخرجات على هذا النحو، ولكنها تتحكم عادةً في
المحطة الطرفية بطريقة ما: على سبيل المثال، السطر الجديد ومسافة للخلف هي أحرف تحكم. على أسكي
الأنظمة الأساسية، في نطاق 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 هي لاتينية-1، وهذا يعني
أن استخدامها بموجب القواعد المحلية ليس من الحكمة ما لم يتم ضمان أن تكون اللغة اللاتينية-1
أو UTF-8. في المقابل، تعتبر فئات أحرف POSIX مفيدة بموجب القواعد المحلية. هم
تتأثر بالقواعد الفعلية المعمول بها، على النحو التالي:
إذا كان المعدل "/a" ساري المفعول ...
تتطابق كل فئة من فئات POSIX تمامًا مع نظيراتها من نطاق ASCII.
خلاف ذلك ...
لنقاط الكود فوق 255 ...
تتطابق فئة POSIX مع نفس نظيرتها ذات النطاق الكامل.
لنقاط الكود أقل من 256 ...
إذا كانت القواعد المحلية سارية ...
تتطابق فئة POSIX وفقًا للغة، باستثناء:
"كلمة"
يتضمن أيضًا حرف الشرطة السفلية الأصلي للنظام الأساسي، بغض النظر عن الأمر
اللغة هي.
"أسكي"
على الأنظمة الأساسية التي لا تحتوي على امتداد POSIX "ascii"، يتطابق هذا
فقط أحرف نطاق ASCII الأصلية للنظام الأساسي.
"فارغ"
على الأنظمة الأساسية التي لا تحتوي على امتداد POSIX "الفارغ"، يتطابق هذا
فقط علامة التبويب الأصلية للنظام الأساسي وأحرف المسافة.
إذا كانت قواعد Unicode سارية ...
تتطابق فئة POSIX مع نفس نظيرتها ذات النطاق الكامل.
خلاف ذلك ...
تتطابق فئة POSIX مع نفس نظير نطاق ASCII.
يتم تحديد القواعد المطبقة كما هو موضح في "معدل مجموعة الأحرف الموجود
تأثير؟" في بيرل.
يُقترح تغيير هذا السلوك في إصدار مستقبلي من Perl بحيث يتم ذلك أم لا
قواعد Unicode سارية المفعول لن تغير السلوك: خارج اللغة، فإن POSIX
سوف تتصرف الفئات مثل نظيراتها من نطاق ASCII. إذا كنت ترغب في التعليق على هذا
الاقتراح، أرسل بريدًا إلكترونيًا إلى "perl5-porters@perl.org".
إلغاء فئات أحرف POSIX
امتداد Perl لفئة أحرف POSIX هو القدرة على إبطالها. يتم ذلك عن طريق
بادئة اسم الفئة بعلامة الإقحام ("^"). بعض الأمثلة:
POSIX ASCII-نطاق مائل عكسي كامل النطاق
تسلسل يونيكود يونيكود
-------------------------------------------------- ---
[[:^digit:]] \P{PosixDigit} \P{XPosixDigit} \D
[[:^space:]] \P{PosixSpace} \P{XPosixSpace}
\P{PerlSpace} \P{XPerlSpace} \S
[[:^كلمة:]] \P{PerlWord} \P{XPosixWord} \W
يمكن أن يعني تسلسل الشرطة المائلة العكسية إما ASCII أو Unicode كامل النطاق، اعتمادًا على المختلف
العوامل كما هو موضح في "ما هو معدّل مجموعة الأحرف الساري؟" في بيرل.
[= =] و [. .]
يتعرف Perl على فئات أحرف POSIX "[=class=]" و"[.class.]"، ولكنه لا يتعرف عليها
(حتى الآن؟) دعمهم. أية محاولة لاستخدام أي من البناءين تثير استثناءً.
أمثلة
/[[:digit:]]/ # يطابق الحرف الذي هو رقم.
/[01[:lower:]]/ # يطابق الحرف الذي يكون إما
# حرف صغير، أو "0" أو "1".
/[[:digit:][:^xdigit:]]/ # يطابق الحرف الذي يمكن أن يكون أي شيء
# باستثناء الحروف من "أ" إلى "ف" و "أ" إلى
# 'F'. وذلك لأن الشخصية الرئيسية
# يتكون الفصل من حرفين POSIX
# الفصول التي يتم ORed معًا، واحدة
# يطابق أي رقم، والآخر ذلك
# يطابق أي شيء ليس رقمًا سداسيًا عشريًا.
# يضيف OR الأرقام ويترك فقط
تم استبعاد # الحروف من "a" إلى "f" و"A" إلى "F".
ممتد بين قوسين حرف فصول دراسية
هذه فئة أحرف رائعة بين قوسين يمكن استخدامها لتكون أكثر قابلية للقراءة وأقل
الفئات المعرضة للخطأ، ولإجراء عمليات محددة، مثل التقاطع. مثال على ذلك
/(?[ \p{Thai} & \p{Digit} ])/
سيطابق هذا كافة الأحرف الرقمية الموجودة في البرنامج النصي التايلاندي.
هذه ميزة تجريبية متاحة بدءًا من الإصدار 5.18، وهي عرضة للتغيير كما نحن
اكتساب الخبرة الميدانية بها. وأي محاولة لاستخدامه ستثير تحذيرًا، إلا إذا
تعطيل عبر
لا توجد تحذيرات "تجريبية::regex_sets"؛
التعليقات على هذه الميزة هي موضع ترحيب. إرسال بريد إلكتروني إلى "perl5-porters@perl.org".
يمكننا توسيع المثال أعلاه:
/(?[ ( \p{Thai} + \p{Lao} ) & \p{Digit} ])/
يطابق هذا الأرقام الموجودة في النصوص التايلاندية أو اللاوسية.
لاحظ المساحة البيضاء في هذه الأمثلة. يحتوي هذا البناء دائمًا على المُعدِّل "/x".
تشغيله داخله.
العوامل الثنائية المتاحة هي:
& تداخل
+ الاتحاد
| اسم آخر لـ "+"، وبالتالي يعني الاتحاد
- الطرح (النتيجة تطابق المجموعة المكونة من تلك
نقاط الكود التي يطابقها المعامل الأول، باستثناء كل ذلك
تتم مطابقتها أيضًا بواسطة المعامل الثاني)
^ الفرق المتماثل (الاتحاد ناقص التقاطع). هذا
يشبه الحصري أو أن النتيجة هي مجموعة التعليمات البرمجية
النقاط التي تتطابق مع أي منهما، وليس كليهما
المعاملات.
يوجد عامل أحادي واحد:
! إطراء
جميع العوامل الثنائية المتبقية مرتبطة؛ "&" لها أسبقية أعلى من غيرها، والتي
جميعها لها أسبقية متساوية. المشغل الأحادي يمين الزميلة، وله أعلى
الأولوية. وبالتالي فإن هذا يتبع قواعد أسبقية Perl العادية للعوامل المنطقية.
استخدم الأقواس لتجاوز الأسبقية والارتباط الافتراضي.
القيد الرئيسي هو أن كل شيء هو حرف أولي. وبالتالي لا يمكنك الرجوع إليها
أحرف مفردة عن طريق القيام بشيء مثل هذا:
/(?[ a + b ])/ # خطأ في بناء الجملة!
أسهل طريقة لتحديد حرف فردي قابل للكتابة هي وضعه بين قوسين:
/(?[ [أ] + [ب] ])/
(هذا هو نفس الشيء مثل "[ab]".) كان بإمكانك أيضًا أن تقول ما يعادله:
/(?[[ أب ]])/
(يمكنك بالطبع تحديد أحرف مفردة باستخدام "\x{...}" و"\N{...}" وما إلى ذلك)
يوضح هذا المثال الأخير استخدام هذا البناء لتحديد قوس عادي
فئة الأحرف دون عمليات مجموعة إضافية. لاحظ المساحة البيضاء بداخلها؛ "/س"
يتم تشغيله حتى ضمن فئات الأحرف الموجودة بين قوسين، باستثناء أنه لا يمكنك الحصول على تعليقات
داخلهم. لذلك،
(؟[ [#] ])
يطابق الحرف الحرفي "#". لتحديد حرف مسافة بيضاء حرفية، يمكنك
الهروب منه بخط مائل عكسي، مثل:
/(?[ [ aeiou \ ] ])/
وهذا يطابق حروف العلة الإنجليزية بالإضافة إلى حرف SPACE. تم قبول جميع عمليات الهروب الأخرى
بواسطة فئات الأحرف العادية بين قوسين يتم قبولها هنا أيضًا؛ لكن عمليات هروب غير معترف بها
التي تولد التحذيرات في الفصول العادية هي أخطاء فادحة هنا.
جميع التحذيرات الصادرة عن هذه العناصر الطبقية قاتلة، بالإضافة إلى بعض الممارسات التي لا تعتبر كذلك
يحذر حاليا. على سبيل المثال لا يمكنك أن تقول
/(?[ [ \xF ] ])/ # خطأ في بناء الجملة!
يجب أن يكون لديك رقمان سداسي عشريان بعد "\x" بدون أقواس (استخدم صفرًا بادئًا لإنشاء رقمين).
تهدف هذه القيود إلى تقليل حدوث الأخطاء المطبعية التي تتسبب في عدم تطابق الفصل مع ما
اعتقدت أنه سوف.
إذا كانت فئة الأحرف العادية بين قوسين تحتوي على "\p{}" أو "\P{}" وتمت مطابقتها
نقطة رمز غير Unicode، قد يتم رفع تحذير، لأن النتيجة ليست معرفة بواسطة Unicode.
لن يأتي مثل هذا التحذير عند استخدام هذا النموذج الموسع.
والفرق الأخير بين فئات الأحرف العادية بين قوسين هو أنه كذلك
ليس من الممكن جعلها تتطابق مع طية متعددة الأحرف. هكذا،
/(?[ [\xDF] ])/iu
لا يتطابق مع السلسلة "ss".
ليس من الضروري أن تضع أسماء فئات POSIX داخل قوسين مزدوجين، وبالتالي فإن كلا من
العمل التالي:
/(?[ [:word:] - [:lower:] ])/
/(?[ [[:word:]] - [[:lower:]] ])/
أي فئات أحرف POSIX مضمنة، بما في ذلك أشياء مثل "\w" و"\D" تحترم
المعدلات "/a" (و"/aa").
"(؟[ ])" عبارة عن بنية وقت ترجمة regex. أي محاولة لاستخدام شيء ليس كذلك
يمكن معرفته في وقت تجميع التعبير العادي الذي يحتوي على خطأ فادح. في
الممارسة، وهذا يعني ثلاثة قيود فقط:
1. لا يمكن استخدام هذا البناء ضمن نطاق "استخدام الإعدادات المحلية" (أو التعبير العادي "/l".
المعدل).
2. أي خاصية معرفة من قبل المستخدم يجب أن تكون محددة بالفعل بحلول الوقت العادي
يتم تجميع التعبير (ولكن لاحظ أنه يمكن استخدام هذا البناء بدلاً من ذلك
ملكيات).
3. التعبير العادي الذي قد يتم تجميعه باستخدام قواعد "/d"، والذي يستخدم
سيستخدم هذا البناء بدلاً من ذلك "/ u". وبالتالي فإن هذا البناء يخبر بيرل أنك لا تفعل ذلك
تريد قواعد "/d" للتعبير العادي بأكمله الذي يحتوي عليه.
لاحظ أن تخطي المسافة البيضاء ينطبق فقط على الجزء الداخلي من هذا التصميم. لا بد من ذلك
لا يوجد أي مسافة بين أي من الأحرف التي تشكل الحرف الأول "(؟ [". ولا يجوز ذلك
تكون هناك مسافة بين أحرف الإغلاق "])".
كما هو الحال في جميع التعبيرات العادية، يمكن بناء النمط من خلال تضمين المتغيرات
التي يتم استيفاءها في وقت تجميع 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} ])/;
my $lower = qr/(?[ \p{Lower} + \p{Digit} ])/;
عندما يتم تضمينها في نمط آخر، فإن ما يطابقها لا يتغير بغض النظر عن ذلك
بين قوسين أو ما هي المعدلات السارية في هذا النمط الخارجي.
نظرًا للطريقة التي يقوم بها Perl بتحليل الأشياء، فقد يلزم أن تكون الأقواس والأقواس المعقوفة كذلك
متوازنة، حتى بما في ذلك التعليقات. إذا واجهت أي أمثلة، يرجى إرسالها إلى
"perlbug@perl.org"، حتى نتمكن من الحصول على مثال ملموس لصفحة الرجل هذه.
يجوز لنا تغييره بحيث تظل الأشياء التي تظل استخدامات قانونية ضمن الحرف العادي بين قوسين
قد تصبح الفصول الدراسية غير قانونية ضمن هذا البناء التجريبي. اقتراح واحد ل
على سبيل المثال، هو منع الاستخدامات المتجاورة لنفس الحرف، كما في "(؟[ [aa] ])". ال
الدافع لمثل هذا التغيير هو أن هذا الاستخدام من المحتمل أن يكون خطأ مطبعي، كما يضيف الحرف "أ" الثاني
لا شى.
استخدم perlrecharclass عبر الإنترنت باستخدام خدمات onworks.net