إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
تستخدم الدالات IsMatch وMatch وMatchAll لاستخراج الأنماط في النص والتحقق من صحتها. يسمى النمط الذي يستخدمونه بالتعبير العادي.
التعبيرات العادية قوية ومتعددة الاستخدامات. ومع ذلك ، يمكن أن تظهر أحيانا كتسلسل عشوائي لعلامات الترقيم. لا تصف هذه المقالة جميع جوانب التعبيرات العادية ، ولكن تتوفر ثروة من المعلومات والبرامج التعليمية والأدوات عبر الإنترنت.
التعبيرات العادية لها تاريخ طويل وهي متوفرة في العديد من لغات البرمجة. كل لغة برمجة لها لهجتها الخاصة من التعبيرات العادية ، وهناك عدد قليل من المعايير. نسعى جاهدين قدر الإمكان للحصول على نفس التعبير العادي الذي يعطي نفس النتيجة في جميع Power Fx التطبيقات. ليس من السهل تحقيق التوافق حيث Power Fx يتم تشغيله فوق JavaScript و .NET اللذين لهما اختلافات كبيرة. للتشغيل على منصات مختلفة ، Power Fx تستخدم التعبيرات العادية مجموعة فرعية من الميزات المدعومة على نطاق واسع في جميع أنحاء الصناعة.
ونتيجة لذلك، قد يتم حظر بعض التعبيرات العادية التي تعمل في بيئات أخرى أو تحتاج إلى تعديلات فيها Power Fx. يتم الإبلاغ عن أخطاء وقت التأليف عند مواجهة ميزات غير مدعومة. هذا هو السبب في أن التعبير العادي والخيارات يجب أن تكون ثابتة وقت التأليف وليست ديناميكية ، مثل توفيرها في متغير.
إشعار
Power Apps يستخدم إصدارا سابقا من Power Fx التعبيرات العادية، والذي يحتوي على قيود أقل ولكن أيضا ميزات أقل. لا تتوفر MatchOptions.DotAll وMatchOptions.FreeSpacing وتختلف تعريفات Match.Email وMatch.Hyphen. لا يتم التعامل مع أزواج Unicode البديلة كحرف واحد. MatchOptions.NumberedSubMatches هو الافتراضي. يتوفر إصدار التعبيرات العادية الموصوفة هنا قريبا Power Apps ، ضمن مفتاح "Power Fx التوافق مع V1.0".
الميزات المدعومة
Power Fx يدعم ميزات التعبير العادي التالية، مع ملاحظات حول كيفية Power Fx اختلاف السلوك عن الأنظمة الأخرى.
يجب أن يكون التعبير العادي ثابتا ولا يتم حسابه أو تخزينه في متغير.
& يتم دعم عامل التشغيل واستيفاء $"{...}" السلسلة و Concatenate و ، Char و UniChar الوظائف ذات الوسيطات الثابتة.
الأحرف الحرفية
| ميزة | الوصف |
|---|---|
| الأحرف الحرفية | يمكن إدراج أي حرف Unicode مباشرة ، باستثناء \ ، [، ]^$.|?*+()،،، {} عند استخدام MatchOptions.FreeSpacing، # ، يجب الهروب من أحرف المسافة الأخرى \s لأن لها معنى مختلفا. |
| الهروب من الشخصيات الحرفية |
\ (شرطة مائلة للخلف) متبوعة بأحد الأحرف الحرفية المباشرة ، مثل \? إدراج علامة استفهام.
\# ويمكن \ استخدامها أيضا حتى عند تعطيل MatchOptions.FreeSpacing من أجل الاتساق. |
| رموز الأحرف السداسية العشرية وUnicode |
\x20 مع رقمين سداسي عشريين بالضبط ، \u2028 مع أربعة أرقام سداسية عشرية بالضبط ويمكن استخدامها للبدائل العالية والمنخفضة. |
| نقطة كود Unicode |
\u{01F47B} مع ما يصل إلى ثمانية أرقام سداسية عشرية. يجب أن يكون في النطاق من 0 إلى U + 10FFFF ولا يمكن استخدامه لبديل مرتفع أو منخفض. قد ينتج عنه زوج بديل (حرفان) إذا كان أكبر من U + FFFF. |
| إرجاع العربة |
\r، مثل Char(13). |
| شخصية Newline |
\n، مثل Char(10). |
| نموذج الخلاصة |
\f، مثل Char(12). |
| علامة التبويب الأفقية |
\t، مثل Char(9). |
استخدم \x أو \u بدلا من ذلك. الرموز المثمانية للأحرف، مثل \044 أو \o{044} غير مسموح بها، لأنها يمكن أن تكون غامضة مع المراجع الخلفية المرقمة.
\v غير مدعوم لأنه غامض عبر لغات التعبير العادي. استخدم \x0b لعلامة تبويب رأسية أو [\x0b\f\r\n\x85\u2028\u2029] للمسافة البيضاء الرأسية.
التاكيدات
تتطابق التأكيدات مع موضع معين في النص ولكنها لا تستهلك أي أحرف.
| ميزة | الوصف |
|---|---|
| بداية الخط |
^، يطابق بداية النص، أو السطر إذا تم استخدام MatchOptions.Multiline . |
| نهاية السطر |
$، يطابق نهاية النص، أو السطر إذا تم استخدام MatchOptions.Multiline . |
| التطلع إلى الأمام |
(?=a) و (?!a)، يتطابق أمام نمط. |
| نظرة خلف |
(?<=b) و (?<!b)، يتطابق خلف نمط. |
| فواصل الكلمات |
\b وباستخدام \B تعريف Unicode للحروف [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}]. |
$ يتطابق مع نهاية الخط ، بما في ذلك أي زائدة \r\n ، \r أو \n.
لا يمكن أن تحتوي تأكيدات Lookahead و lookbehind على تطابقات فرعية أو مقاييس كمية غير محدودة في الداخل ، ولا يمكن استخدامها مع القياس الكمي بالخارج.
فئات الشخصيات
| ميزة | الوصف |
|---|---|
| نقطة |
.، يتطابق مع كل شيء باستثناء \r وما \n لم يتم استخدام MatchOptions.DotAll . |
| فئة الشخصية |
[abc] قائمة الشخصيات ، [a-fA-f0-9] مجموعة الشخصيات ، [^a-z] كل شيء ما عدا هذه الشخصيات. لا يمكن تداخل فئات الأحرف أو طرحها أو تقاطعها ، وقد لا تظهر العديد من علامات الترقيم مرتين متتاليتين (@@، %%، !!، إلخ). |
| أحرف الكلمات |
\w واستخدام \W تعريف Unicode للحروف [\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}].
\W لا يمكن استخدامها في فئة الأحرف السلبية. |
| أحرف الأرقام |
\d يتضمن الأرقام 0 إلى9 و \p{Nd} ، \D يطابق كل شيء باستثناء الأحرف المطابقة بواسطة \d.
\D لا يمكن استخدامها في فئة الأحرف السلبية. |
| أحرف الفضاء |
\s يتضمن أحرف التباعد ، [ \t\n\x0b\f\r\x85\u2028\u2029\p{Z}] والتي تطابق كل شيء باستثناء الأحرف المتطابقة \S بها \s.
\S لا يمكن استخدامها في فئة الأحرف السلبية. |
| فئة أحرف Unicode |
\p{Ll} يتطابق مع جميع الأحرف الصغيرة في Unicode، بينما \P{Ll} يتطابق مع كل ما لا يمثل حرفا صغيرا من Unicode.
\P{} لا يمكن استخدامها في فئة الأحرف السلبية. |
لزيادة الوضوح وتجنب الغموض، تعد فئات الأحرف ذات الأقواس المربعة أكثر تقييدا من لغات التعبير العادي الأخرى:
- يجب التغلب على أحرف الواصلة الحرفية. استخدم
[\-a]بدلا من[-a]مطابقة-أوa. - ويجب التغلب على الأقواس المربعة الأولى. استخدم
[\[a]بدلا من[[]مطابقة[أوa. - ما لم تكن الشخصية الأولى وتشير إلى النفي ، يجب الهروب من الشخصية. استخدم
[a\^]بدلا من[a^]مطابقة^أوa. - يجب الهروب من الأقواس المجعدة. استخدم
[\{\}]لمطابقة{أو}. - فئة
[]الأحرف الفارغة غير مدعومة. لتضمين قوس مربع ختامي في فئة أحرف، اهربت منه.
فئات أحرف Unicode التي تدعمها \p{} و \P{}:
- الرسائل:
L،Lu،Ll،Lt،LmLo - العلامات:
M،،Mn،McMe - الأرقام:
N،،Nd،NlNo - علامات الترقيم:
P،،PcPd،Ps،PePi،PfPo - الرموز:
S،Sm،Sc،SkSo - الفواصل:
Z،،Zs،ZlZp - Control and Format:
Cc,،Cfفي حين أن فئات البادئة الأخرىCغير مدعومة.
\W، \D،، ولا \Sيمكن استخدامها ضمن فئة \P{} الأحرف الملغاة [^...]. من أجل تنفيذها على بعض الأنظمة الأساسية ، تتم ترجمة فئات الأحرف السلبية هذه إلى معادلاتها في Unicode والتي قد يكون من الصعب القيام بها إذا تم إبطالها أيضا.
أحرف Unicode بين U+10000 وU+10FFFFF، التي تتطلب أزواج بديلة، غير مدعومة في فئات الأحرف.
الكميات
| ميزة | الوصف |
|---|---|
| صفر جشع أو واحد |
? تطابق صفر أو مرة واحدة ، مع أكبر عدد ممكن من التطابق. |
| صفر جشع أو أكثر |
* يتطابق صفر أو أكثر من المرات ، مع أكبر عدد ممكن من التطابق. |
| جشع واحد أو أكثر |
+ يتطابق مرة واحدة أو أكثر ، مع أكبر عدد ممكن من المطابقة. |
| جشع على الأقل ن |
{n,} يتطابق على الأقل n مرة ، مع أكبر عدد ممكن من التطابق. على سبيل المثال ، a{3,} يطابق جميع الأحرف في aaaaa. |
| جشع بين n و m |
{n,m} تطابق بين N و M مرات ، مع أكبر عدد ممكن من التطابق. على سبيل المثال ، a{1,3} يطابق الأحرف الثلاثة الأولى من aaaaa. |
| كسول صفر أو واحد |
?? تطابق صفر أو مرة واحدة ، مع تطابق صغير قدر الإمكان. |
| زي زي صفر أو أكثر |
*? يتطابق صفر أو أكثر ، مع أصغر عدد ممكن من التطابق. |
| كسول واحد أو أكثر |
+? يتطابق مرة واحدة أو أكثر ، مع أصغر عدد ممكن من التطابق. |
| كسول على الأقل ن |
{n,}? يتطابق N مرة على الأقل ، مع تطابق صغير قدر الإمكان. على سبيل المثال ، a{3,}? يطابق الأحرف aaaaa الثلاثة الأولى فقط. |
| كسول بين n و m |
{n,m}? تطابق بين N و M مرات ، مع أصغر عدد ممكن من التطابق. على سبيل المثال ، a{1,3}? يتطابق فقط مع الحرف الأول من aaaaa. |
| بالضبط ن |
{n} يتطابق n مرات بالضبط. على سبيل المثال ، a{3} يطابق بالضبط ثلاثة أحرف aaaaa. |
لا يتم دعم المقاييس الكمومية الملكية.
خلط التطابقات الفرعية والكميات له قيود. لمزيد من المعلومات، راجع احتمال فارغ التطابقات الفرعية.
مجموعات
| ميزة | الوصف |
|---|---|
| Group (المجموعة) |
( وتستخدم ) لتجميع العناصر لتطبيق الكميات. على سبيل المثال ، (abc)+ المباريات abcabc. |
| التناوب |
a|b يتطابق مع "أ" أو "ب" ، وغالبا ما تستخدم في مجموعة. |
| المطابقة الفرعية المسماة والمرجع الخلفي |
(?<name>chars) يلتقط تطابقا فرعيا مع الاسم name، المشار إليه ب \k<name>. لا يمكن استخدامها إذا تم تمكين MatchOptions.NumberedSubMatchs . |
| المطابقة الفرعية المرقمة والمرجع الخلفي | عند تمكين MatchOptions.NumberedSubMatchs ، (a) يلتقط تطابقا فرعيا تمت الإشارة إليه \1. |
| مجموعة Noncapture |
(?:a)، ينشئ مجموعة دون التقاط النتيجة كمطابقة فرعية مسماة أو مرقمة. لا يتم التقاط جميع المجموعات ما لم يتم تمكين MatchOptions.NumberedSubMatchs . |
لا يمكن استخدام التطابقات الفرعية المسماة والمرقمة معا. بشكل افتراضي، يتم تمكين التطابقات الفرعية المسماة ويفضل من أجل الوضوح وقابلية الصيانة، بينما تصبح مجموعات الالتقاط القياسية مجموعات غير ملتقطة ذات أداء محسن. يمكن تغيير هذا السلوك باستخدام MatchOptions.NumberedSubMatches الذي يوفر مجموعات الالتقاط التقليدية ولكنه يعطل مجموعات الالتقاط المسماة. تتعامل بعض التطبيقات مع مزيج من مجموعات الالتقاط المرقمة والمسماة بشكل مختلف وهذا هو السبب في Power Fx عدم السماح بذلك.
مجموعات التقاط المرجع الذاتي غير مدعومة، على سبيل المثال التعبير (a\1) العادي.
لا يمكن لمجموعتي التقاط مشاركة نفس الاسم، على سبيل المثال، التعبير العادي (?<id>\w+)|(?<id>\d+) غير مدعوم.
يجب أن يبدأ اسم المطابقة الفرعية المسماة بحرف \p{L} أو _ يمكن أن يستمر مع هذه الأحرف بالإضافة \p{Nd} إلى ذلك. الأسماء محدودة في الطول إلى 62 UTF-16 وحدة كود.
كما أن الإحالات الخلفية إلى المباريات الفرعية الفارغة وإلى التطابقات الفرعية ضمن نظرة إلى الخلف أو التطلع إلى الأمام غير مدعومة أيضا.
تقدم بعض التطبيقات خيار "التقاط صريح" لتحسين الأداء وهو أمر غير ضروري Power Fx لأنه الخيار الافتراضي. يقوم MatchOptions.NumberedSubMatches بتعطيله وتمكين اللقطات المرقمة ضمنيا.
خلط المطابقات الفرعية والكميات له قيود. راجع إمكانية التطابقات الفرعية الفارغة لمزيد من المعلومات.
تعليقات
| ميزة | الوصف |
|---|---|
| التعليقات المضمنة |
(?# comment here)، الذي يتم تجاهله كتعليق. ينتهي التعليق بالقوس القريب التالي ، حتى إذا كان هناك قوس افتتاحي في التعليق. |
راجع MatchOptions.FreeSpacing للحصول على بديل لتنسيق التعبيرات العادية والتعليق عليها.
خيارات مضمنة
| ميزة | الوصف |
|---|---|
| خيارات مضمنة |
(?im) هو نفس استخدام MatchOptions.IgnoreCase و MatchOptions.Multiline. يجب ضبطه في بداية التعبير العادي. |
الأوضاع المضمنة المدعومة [imsx]. تتوافق هذه مع MatchOptions.IgnoreCase و MatchOptions.Multiline و MatchOptions.DotAll و MatchOptions.FreeSpacing ، على التوالي.
n مقبول أيضا للتوافق ولكن ليس له أي تأثير لأنه الافتراضي وغير متوافق مع MatchOptions.NumberedSubMatches.
لا يمكن استخدام الخيارات المضمنة لتعطيل خيار أو تعيين خيار لتعبير فرعي.
الخيارات
تعمل خيارات المطابقة على تغيير سلوك مطابقة التعبير العادي. هناك طريقتان لتمكين الخيارات، والتي يمكن مزجها طالما لا يوجد تعارض:
-
تم تمرير قيمة تعداد MatchOptions كوسيطة ثالثة إلى Match وMatchAll وIsMatch . يمكن دمج الخيارات مع
&المشغل أوConcatenateالوظيفة ، على سبيل المثالMatchOptions.DotAll & MatchOptions.FreeSpacing. تتطلب جميع وظائف التعبير العادي أن تكون MatchOptions قيمة ثابتة ، ولا يمكن حسابها أو تخزينها في متغير. -
(?...)بادئة في بداية التعبير العادي. يمكن دمج الخيارات مع أحرف متعددة في البنية(?...)، على سبيل المثال(?sx). لا تحتوي بعض الخيارات على ما(?...)يعادل ولكن قد يكون لها طرق أخرى للحصول على نفس التأثير ، على سبيل المثال MatchOptions.BeginsWith هو ما يعادل^في بداية التعبير العادي.
يحتوي على
ممكن باستخدام MatchOptions.يحتوي بدون مكافئ نص تعبير عادي. MatchOptions.Contains هو الافتراضي لجميع الوظائف خارج Power Apps ؛ داخل Power Apps MatchOptions.Complete هو الافتراضي ل IsMatch.
مكتملة
ممكن باستخدام MatchOptions.Complete أو استخدم ^ وفي $ البداية والتعبير العادي ، على التوالي.
BeginsWith
ممكن باستخدام MatchOptions.Beginsمع أو استخدم ^ في البداية والتعبير العادي.
EndsWith
ممكن باستخدام MatchOptions.EndsWith أو يستخدم $ في نهاية التعبير العادي.
دوت أول
ممكن باستخدام MatchOptions.DotAll أو (?s) في بداية التعبير العادي.
عادة ما يتطابق عامل التشغيل النقطي . مع جميع الأحرف باستثناء أحرف [\n\x0b\f\r\x85\u2028\u2029] السطر الجديد. باستخدام معدل DotAll ، تتم مطابقة جميع الأحرف، بما في ذلك الأسطر الجديدة.
في هذا المثال، تتم مطابقة "Hello" فقط حيث لن يتطابق السطر الجديد بشكل افتراضي . :
Trim( Match( "Hello
World", ".*" ).FullMatch )
// returns
// "Hello"
ولكن إذا أضفنا معدل DotAll ، مطابقة السطر الجديد وجميع الأحرف اللاحقة:
Trim( Match( "Hello
World", ".*", MatchOptions.DotAll ).FullMatch )
// returns
// "Hello
// World"
التباعد الحر
ممكن باستخدام MatchOptions.FreeSpacing أو (?x) في بداية تعبير عادي.
يسهل التباعد الحر قراءة تعبير عادي معقد والحفاظ عليه. القواعد بسيطة:
- يتم تجاهل أحرف المسافة في التعبير العادي، بما في ذلك جميع الأحرف التي قد تتطابق
\s. إذا كانت مطابقة المساحة مطلوبة ، فاستخدم\s،\،\t،،\r، أو\n. -
#يبدأ تعليقا يستمر حتى نهاية السطر. يتم تجاهله وجميع الأحرف التي تتبع حرف السطر الجديد التالي (الأحرف غير المتطابقة بدون.MatchOptions.DotAll). - لا يتم تضمين فئات الأحرف في هذه التغييرات. الفضاء الشخصيات والتصرف
#كما يفعلون عادة. على سبيل المثال،IsMatch( "a#b c", "(?x)a[ #]b[ #]c" )ترجع true. تتضمن بعض لغات التعبير العادي فئات الأحرف في تباعد حر، أو توفر خيارا لتضمينها، ولكنها Power Fx لا تفعل ذلك.
على سبيل المثال، فيما يلي تعبير عادي معقد لمطابقة تاريخ ISO 8601:
IsMatch(
"2025-01-17T19:38:49+0000",
"^\d{4}-(0\d|1[012])-([012]\d|3[01])(T([01]\d|2[0123]):[0-5]\d(:[0-5]\d(\.\d{3})?)?(Z|[\-+]\d{4}))?$"
)
// returns true
وإليك التعبير العادي المتطابق مع التباعد الحر باستخدام أسطر متعددة ، ومسافة بادئة للمجموعات ، وتعليقات التعبير العادي ، مما يجعل هذا الإصدار أسهل في الفهم والتحقق من صحته وصيانته.
IsMatch( "2025-01-17T19:38:49+0000",
"(?x) # enables free spacing, must be very first
^ # matches from beginning of text
\d{4} # year (0000-9999)
-(0\d|1[012]) # month (00-12)
-([012]\d|3[01]) # day (00-31, range not checked against month)
(T([01]\d|2[0123]) # optional time, starting with hours (00-23)
:[0-5]\d # minutes (00-59)
(:[0-5]\d # optional seconds (00-59)
(\.\d{3})? # optional milliseconds (000-999)
)?
(Z|[\-+]\d{4}) # time zone
)?
$ # matches to end of text
"
)
// returns true
تجاهل الحالة
ممكن باستخدام MatchOptions.IgnoreCase أو (?i) في بداية تعبير عادي.
مطابقة النص في رسالة غير حساسة لحالة الأحرف: تتطابق الأحرف الكبيرة مع الأحرف الصغيرة وتتطابق الأحرف الصغيرة مع الأحرف الكبيرة.
على سبيل المثال:
IsMatch( "HELLO!", "hello", MatchOptions.IgnoreCase )
// returns true
IsMatch( "file://c:/temp/info.txt", "^FILE://", MatchOptions.IgnoreCase )
// returns true
معظم الأجزاء أو Power Fx على دراية بالثقافة ، ولكن ليس هنا. يعد استخدام مطابقة الثقافة الثابتة هو المعيار الصناعي للتعبيرات العادية، بما في ذلك في JavaScript وPerl. إنه مفيد في المثال الثاني حيث تتم مطابقة مورد النظام ، على سبيل المثال ، tr-TR الثقافة حيث I لا تكون الأحرف الكبيرة المكافئة i.
إذا كانت هناك حاجة إلى تطابق غير حساس لحالة الأحرف ، فاستخدم فئة الأحرف مع الأحرف المطابقة بدلا من ذلك ، على سبيل المثال [Hh][Ee][Ll][Ll][Oo] في المثال الأول.
متعدد الأسطر
ممكن باستخدام MatchOptions.Multiline أو (?m) في بداية تعبير عادي.
عادة ، ^ وتتطابق $ المراسي مع بداية ونص الإدخال. باستخدام معدل متعدد الأسطر ، تتطابق نقاط الارتساء هذه مع بداية الأسطر ونهايتها في نص الإدخال ، حيث ينتهي كل سطر ب \r ، \n، \r\n، أو نهاية الإدخال. على سبيل المثال:
MatchAll( "Hello" & Char(13) & Char(10) & "World", "^.+$" )
// returns
// "Hello"
أنماط محددة مسبقًا
تتيح لك الأنماط المحددة مسبقا مطابقة إما واحدة من مجموعة من الأحرف أو سلسلة من الأحرف المتعددة. استخدم عامل تشغيل تسلسل السلسلة& لدمج السلاسل النصية مع أعضاء تعداد المطابقة :
| تعداد المطابقة | الوصف | التعبير العادي |
|---|---|---|
| أي | تطابق أي حرف. | . |
| فاصلة | يطابق فاصلة ,. |
, |
| ارقام | يطابق رقما واحدا (0 من خلال 9 وأعضاء \p{Nd} آخرون). |
\d |
يطابق عنوان بريد إلكتروني يحتوي على رمز "at" (@) واسم مجال يحتوي على نقطة واحدة على الأقل (.) ، محددة بمسافات بيضاء وأحرف ترقيم. |
انظر الملاحظة | |
| شحطة | مطابقة شرطة. |
-
انظر الملاحظة |
| ليفت بارين | يتطابق مع قوس ( أيسر. |
\( |
| رسالة | مطابقة حرف. | \p{L} |
| متعدد الأرقام | مطابقة واحد أو أكثر من الأرقام. | \d+ |
| متعدد الأحرف | مطابقة واحد أو أكثر من الأحرف. | \p{L}+ |
| MultipleNonSpaces | مطابقة حرف واحد أو أكثر لا يضيف مسافة بيضاء (وليس مسافة أو علامة تبويب أو سطر جديد). | \S+ |
| MultipleSpaces | مطابقة حرف واحد أو أكثر يضيف مسافة بيضاء (مسافة أو علامة تبويب أو سطر جديد). | \s+ |
| غير فضائي | مطابقة حرف واحد لا يضيف مسافة بيضاء. | \S |
| الأرقام الاختيارية | مطابقة صفر أو رقم واحد أو أكثر. | \d* |
| رسائل اختيارية | مطابقة صفر أو حرف واحد أو أكثر. | \p{L}* |
| اختياريNonSpaces | مطابقة صفر أو حرف واحد أو أكثر لا تضيف مسافات بيضاء. | \S* |
| المساحات الاختيارية | مطابقة صفر أو حرف واحد أو أكثر تضيف مسافات بيضاء. | \s* |
| مرحلة زمنية | يطابق نقطة أو نقطة .."). |
\. |
| رايت بارين | يتطابق مع الأقواس ) اليمنى. |
\) |
| فضاء | مطابقة حرف يضيف مسافة بيضاء. | \s |
| علامة التبويب | مطابقة حرف جدولة. | \t |
على سبيل المثال ، يتطابق النمط "A" و Match.MultipleDigits مع الحرف "A" متبوعا برقم واحد أو أكثر.
النمط Match.Email أكثر تعقيدا من البقية. يكتشف ويستخرج عناوين البريد الإلكتروني الشائعة في النموذج local@hostname.tld ، ربما من مقاطع طويلة من النص ، ويدعم الأحرف والرموز التعبيرية الدولية. استخدمه للتحقق من صحة نموذج يأخذ عنوان بريد إلكتروني كمدخل، كاختبار سريع لإثبات أن الإدخال في نموذج بريد إلكتروني. إذا لم تكن تقوم بالاستخراج، فاستخدم MatchOptions.Complete لاكتشاف عنوان بريد إلكتروني، على سبيل المثال، في عنصر تحكم إدخال نص.
ومع ذلك ، لا يتحقق Match.Email من أن عنوان البريد الإلكتروني يتوافق مع جميع المعايير المتطورة العديدة لعناوين البريد الإلكتروني وأسماء النطاقات ونطاقات المستوى الأعلى والتي تتطلب تعبيرا عاديا معقدا يحتاج إلى التحديث من وقت لآخر. على الرغم من أن معظم عناوين البريد الإلكتروني يتم التعامل معها كما هو متوقع Match.Email إلا أنها تتطابق مع بعض الحالات غير الصالحة، مثل شرطة سفلية في اسم المضيف، ولا تتطابق مع بعض الحالات الصالحة، مثل عناوين البريد الإلكتروني المقتبسة أو عناوين IP. إذا لزم الأمر ، هناك العديد من التعبيرات العادية على الويب للكشف عن عنوان بريد إلكتروني قانوني حقا. اختبر دائما تعبيرك المنتظم لاحتياجاتك الخاصة قبل استخدامه في الإنتاج.
إذا كنت تريد رؤية التعبير العادي المستخدم، فقم بتقييم الصيغة Text( Match.Email ). يتطابق الجزء الأول مع الأحرف قبل @ ويستبعد علامات الترقيم ASCII الشائعة وفقًا لـ RFC 822 والمراجعات وعلامات الترقيم التي تبدأ وتنتهي بـ Unicode لتسهيل الاستخراج، مثل (، و[، و“، و«، و「. لا يدعم الاستخدام غير المألوف وغير المشجع للسلاسل أو التعليقات المقتبسة بعد @ ذلك ، يكون الجزءان الثاني والثالث من التعبير العادي متماثلين ومفصولين ب a . ، مما يضمن وجود جزء . واحد على الأقل في العنوان. تستبعد هذه الأجزاء جميع علامات الترقيم Unicode باستثناء . ، -، و _. عناوين IP غير مدعومة. في جميع أنحاء عنوان البريد الإلكتروني بأكمله ، يتم دعم الأحرف والرموز التعبيرية الدولية.
في Power Apps ، عند عدم استخدام Power Fx 1.0 ، Match.Email و Match.Hyphen لهما تعريفات مختلفة قليلا. Match.Email أبسط ، لكنه غير مناسب لاستخراج عنوان بريد إلكتروني لأنه يلتقط مسافات. في السابق ، تم الهروب من Match.Hyphen خارج فئة الشخصيات التي أصبحت الآن غير قانونية.
مباريات فرعية مرقمة
ممكن باستخدام MatchOptions.NumberedSubMatches بدون خيار مضمن.
(?n) مدعوم باعتباره عكس هذا الخيار للتوافق وهو الخيار الافتراضي.
بشكل افتراضي ، (...) لا يلتقط ، وهو ما يعادل ما تسميه معظم الأنظمة "الالتقاط الصريح". للالتقاط ، استخدم لقطة مسماة مع (?<name>...) الإسناد \k<name> الخلفي. يؤدي استخدام اللقطات المسماة إلى تحسين الأداء من خلال عدم التقاط المجموعات غير المطلوبة، وتحسين الوضوح باستخدام الأسماء، وعدم التعرض للأخطاء إذا تغير موضع اللقطات.
إذا كان لديك تعبير عادي حالي، فقد يعتمد ذلك على المجموعات التي يتم التقاطها تلقائيا وترقيمها، بما في ذلك المراجع الخلفية المرقمة. يتوفر هذا السلوك باستخدام الخيار MatchOptions.NumberedSubMatchs .
لا يمكن استخدام المطابقات الفرعية المسماة والمرقمة معا. نظرا لأن بعض التطبيقات تتعامل مع مزيج من مجموعات الالتقاط المرقمة والمسماة بشكل مختلف ، Power Fx فإنها لا تسمح بذلك.
من المحتمل أن تكون مباريات فرعية فارغة
كما هو مذكور في المقدمة ، Power Fx تقتصر التعبيرات العادية عن قصد على الميزات التي يمكن تنفيذها باستمرار على .NET و JavaScript ومحركات التعبير العادي للغات البرمجة الأخرى. تمنع أخطاء وقت التأليف استخدام الميزات التي ليست جزءا من هذه المجموعة.
أحد المجالات التي يمكن أن تكون مختلفة بين التطبيقات هو كيفية التعامل مع التطابقات الفرعية الفارغة. على سبيل المثال، ضع في اعتبارك التعبير (?<submatch>a*)+ العادي المطلوب مطابقة النص a. على .NET ، ينتج عن المطابقة الفرعية سلسلة نصية فارغة ، بينما في JavaScript ينتج a عنها. يمكن القول كلاهما على أنهما تطبيقان صحيحان ، حيث يمكن أن يكون المقياس + الكمي راضيا عن سلسلة فارغة لأن محتويات المجموعة لها * مقياس كمي.
لتجنب النتائج المختلفة عبر Power Fx عمليات التنفيذ، لا يمكن استخدام التطابقات الفرعية التي قد تكون فارغة مع المقياس الكمي. في ما يلي أمثلة على كيفية أن تكون المطابقة الفرعية فارغة:
| الأمثلة | الوصف |
|---|---|
(?<submatch>a{0,}b*)+ |
جميع محتويات المطابقة الفرعية اختيارية، لذلك قد تكون المطابقة الفرعية بأكملها فارغة. |
((<submatch>a)?b)+ |
بسبب ? خارج المطابقة الفرعية ، فإن المطابقة الفرعية ككل اختيارية. |
(?<submatch>a|b*)+ |
قد يؤدي التناوب داخل المباراة الفرعية مع شيء يمكن أن يكون فارغا إلى أن تكون المباراة الفرعية بأكملها فارغة. |
((?<submatch>a)|b)+ |
يمكن أن يتطابق b التناوب خارج المطابقة الفرعية وفي هذه الحالة ستكون المطابقة الفرعية فارغة. |
لا يمكن أن تكون المطابقة الفرعية فارغة (?<submatch>a+)+ لأنه يجب أن يكون هناك واحد a على الأقل في المطابقة الفرعية، وهي مدعومة.
Unicode
Power Fx تستخدم التعبيرات العادية فئات Unicode لتعريفها \w ، \d ومع \s توفر فئات محددة من خلال \p{..}.
قد تختلف هذه التعريفات باختلاف الأنظمة الأساسية. على سبيل المثال ، يتم تحديث معيار Unicode من وقت لآخر بأحرف جديدة سيتم تنفيذها لاحقا بواسطة الأنظمة الأساسية بالسرعة التي تناسبهم. توقع اختلافات في النتائج بين الأنظمة الأساسية حتى يتم تحديث جميع الأنظمة الأساسية.
Power Fx تضمن التعبيرات العادية توفر معلومات الفئة دائما للمستوى الأساسي متعدد اللغات (الأحرف U + 0 إلى U + ffff). لا تنفذ بعض الأنظمة الأساسية فئات للأحرف في المستوى التكميلي متعدد اللغات وما بعده (U + 10000 إلى U + 10ffff). عادة لا يكون هذا القيد مصدر قلق لأن الأحرف في المستوى الأساسي متعدد اللغات هي الأكثر استخداما. استخدم قيم الأحرف مباشرة بدلا من الفئات إذا كان السيناريو الخاص بك يتضمن أحرفا عند U+10000 أو أبعده. اختبر تعبيراتك العادية على الأنظمة الأساسية التي تنوي استخدامها.
قد توجد اختلافات صغيرة في حالة الحواف بين الأنظمة الأساسية. على سبيل المثال، قد لا ترى ſ بعض الأنظمة الأساسية مطابقة s عند استدعاء MatchOptions.IgnoreCase . إذا كانت هذه الأحرف مهمة للسيناريو الخاص بك ، فاستخدم فئة شخصية مثل [ſsS] مطابقة الحالة بشكل غير حساس وتضمين الأحرف المطلوبة بشكل صريح.