English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
تعبيرات النمط هو نمط للتنسق مع النص المدخل.
يقدم محرك تعبيرات النمط الذي يسمح بهذا التطابق في إطار عمل .Net.
النمط مكون من حرف واحد أو أكثر، عمليات حسابية ومباني.
فيما يلي قائمة بالحروف والعمليات الحسابية والمباني المستخدمة لتحديد تعبيرات النمط المختلفة.
إسقاط الحروف
字符类
النقاط المحددة
بناء المجموعات
محدد
بنية الاستدلال
البنية البديلة
التبديل
بناءات الم杂物
في تعبيرات النمط، الرمز المائل (\) يشير إلى أن الحرف التالي هو رمز خاص أو يجب تفسير هذا الحرف حرفياً.
في الجدول أدناه تم تقديم رموز الإسقاط:
رمز الإسقاط | الوصف | النمط | التنسيق |
---|---|---|---|
\a | تطابق مع رمز الجرس \u0007. | \a | "Warning!" + '\u0007' 中的 "\u0007" |
\b | في فئة الحروف، تطابق مع مفتاح السحب \u0008. | [\b]{3,} | "\b\b\b\b" 中的 "\b\b\b\b" |
\t | تطابق مع رمز التبويب \u0009. | (\w+)\t | "Name\tAddr\t" 中的 "Name\t" و "Addr\t" |
\r | تطابق مع رمز السحب \u000D. (\r ليس معادلاً لـ \n.) | \r\n(\w+) | "\r\nHello\nWorld." 中的 "\r\nHello" |
\v | تطابق مع رمز الخط العمودي للنص \u000B. | [\v]{2,} | "\v\v\v" 中的 "\v\v\v" |
\f | تطابق مع رمز النسخة الجديدة للصفحة \u000C. | [\f]{2,} | "\f\f\f" 中的 "\f\f\f" |
\n | تطابق مع رمز النسخة الجديدة للصفحة \u000A. | \r\n(\w+) | "\r\nHello\nWorld." 中的 "\r\nHello" |
\e | تطابق مع رمز الإسقاط \u001B. | \e | "\x001B" 中的 "\x001B" |
\ nnn | يُحدد حرف باستخدام شكل العشرية (nnn مكون من ثنيات إلى ثلاثة أرقام). | \w\040\w | "a bc d" 中的 "a b" 和 "c d" |
\x nn | 使用十六进制表示形式指定字符(nn 恰好由两位数字组成)。 | \w\x20\w | "a bc d" 中的 "a b" 和 "c d" |
\c X \c x | 匹配 X 或 x 指定的 ASCII 控件字符,其中 X 或 x 是控件字符的字母。 | \cC | "\x0003" 中的 "\x0003" (Ctrl-C) |
\u nnnn | 使用十六进制表示形式匹配一个 Unicode 字符(由 nnnn 表示的四位数)。 | \w\u0020\w | "a bc d" 中的 "a b" 和 "c d" |
\ | 在后面带有不识别的转义字符时,与该字符匹配。 | \d+[\+-x\*]\d+\d+[\+-x\*\d+ | "(2+2) * 3*9" 中的 "2+2" 和 "3*9" |
字符类与一组字符中的任何一个字符匹配。
下表列出了字符类:
字符类 | الوصف | النمط | التنسيق |
---|---|---|---|
[character_group] | 匹配 character_group 中的任何单个字符。 默认情况下,匹配区分大小写。 | [mn] | "mat" 中的 "m","moon" 中的 "m" 和 "n" |
[^character_group] | 非:与不在 character_group 中的任何单个字符匹配。 默认情况下,character_group 中的字符区分大小写。 | [^aei] | "avail" 中的 "v" 和 "l" |
[ first - last ] | 字符范围:与从 first 到 last 的范围中的任何单个字符匹配。 | [b-d] | [b-d]irds 可以匹配 Birds、 Cirds、 Dirds |
. | 通配符:与除 \n 之外的任何单个字符匹配。 若要匹配原意句点字符(. 或 \u002E),您必须在该字符前面加上转义符 (\.)。 | a.e | "have" ٢٩ ١٧٥ ٩٢ ٧٥ ٩٢ ٬٩ ٩٢ ٧٥ ٩٢ |
\p{ name } | ٥٤٢٧ الاسم ٥٤٢٧ ٩١٤٢٬٨٠ ٩٢٬٨٠ ٩١٤٢٬٨٠ ٢٬٨٠ ٩١٤٢٬٨٠ | \p{Lu} | "City Lights" ٢٩ ٩٢ ٬٩ |
\P{ name } | ٥٤٢٧ ٩١٤٢٬٨٠ الاسم ٥٤٢٧ ٩١٤٢٬٨٠ ٩٢٬٨٠ ٩١٤٢٬٨٠ ٢٬٨٠ ٩١٤٢٬٨٠ | \P{Lu} | "City" ٢٩٢٥ ٩٢ ٩٢ |
\w | ٥٤٢٧ ٥٢٧٩٢٬٨٠ ٩١٧٥٢٬٨٠ | \w | "Room#1" ٢١٢٣ ١٤٢٥ |
\W | تطابق أي حرف غير كلمة. | \W | في "Room#1" "#" |
\s | تطابق أي فراغ. | \w\s | في "ID A1.3" "D " |
\S | تطابق أي حرف غير فراغ. | \s\S | في "int __ctr" " _" |
\d | تطابق أي رقم دسم. | \d | في "4 = IV" "4" |
\D | تطابق أي حرف غير دسم. | \D | في "4 = IV" " " و "=" و " " و "I" و "V" |
النقاط المحددة أو التأكيدات الصفرية الزاوية تجعل التطابق ناجحًا أو فاشلًا، اعتمادًا على الموضع الحالي في النص، لكنها لا تجعل المحرك يتحرك في النص أو يستخدم الحروف.
الجدول أدناه يعرض النقاط المحددة:
التأكيد | الوصف | النمط | التنسيق |
---|---|---|---|
^ | تطابق يجب أن يبدأ من بداية النص أو بداية السطر. | ^\d{3} | في "567-777-" "567" |
$ | تطابق يجب أن يظهر في نهاية النص أو يظهر في نهاية السطر أو في نهاية النص. \n من قبل. | -\d{4}$ | في "8-12-2012" "-2012" |
\A | تطابق يجب أن يظهر في بداية النص. | \A\w{4} | في "Code-007-" "Code" |
\Z | تطابق يجب أن يظهر في نهاية النص أو يظهر في نهاية النص أو في النهاية. \n من قبل. | -\d{3}\Z | في "Bond-901-007" "-007" |
\z | تطابق يجب أن يظهر في نهاية النص. | -\d{3}\z | في "-901-333" "-333" |
\G | تطابق يجب أن يظهر في النقطة التي انتهت منها النسخة المكتشفة السابقة. | \G\(\d\) | في "(1)(3)(5)[7](9)" "(1)" و "(3)" و "(5)" |
\b | تطابق الحد الحرفي، وهو الموضع بين الكلمة والفضاء. | er\b | تطابق "never" في "er"، لكن لا تطابق "verb" في "er". |
\B | تطابق غير الحد الحرفي. | er\B | تطابق "verb" في "er"، لكن لا تطابق "never" في "er". |
بناء المجموعات يصف النسخة الفرعية من التعبيرات العادية، وتستخدم عادةً لتسجيل النسخة الفرعية من النص المدخل.
الجدول أدناه يعرض بناء المجموعات:
بناء المجموعات | الوصف | النمط | التنسيق |
---|---|---|---|
( subexpression ) | تسجيل النسخة المكتشفة في ترتيب من الصفر. | (\w)\1 | في "deep" "ee" |
(?< name >subexpression) | تسجيل النسخة المكتشفة في مجموعة بتسمية. | (?< double>\w)\k< double> | في "deep" "ee" |
(?< name1 -name2 >subexpression) | تحديد مجموعة متوازنة. | (((?'Open'\()[^\(\)]*)+((?'Close-Open'\))[^\(\)]*)+)*(?(Open)(?!))$ | في "3+2^((1-3)*(3-1))"، "((1-3)*(3-1))" |
(?: subexpression) | تحديد مجموعة غير محتسبة. | Write(?:Line)? | في "Console.WriteLine()"، "WriteLine" |
(?imnsx-imnsx:subexpression) | التطبيق أو إلغاء التطبيق subexpression المحدد المحدد. | A\d{2}(?i:\w+)\b | في "A12xl A12XL a12xl"، "A12xl" و "A12XL" |
(?= subexpression) | التنبؤ المسبق غير العضوي للنطاق الصفر. | \w+(?=\.) | في "He is. The dog ran. The sun is out."، "is" و "ran" و "out" |
(?! subexpression) | الاستدلال المسبق غير العضوي للتنبؤ بالسلب. | \b(?!un)\w+\b | في "unsure sure unity used"، "sure" و "used" |
(?<=subexpression) | الاستدلال المسبق غير العضوي للنطاق الصفر. | (?A+B+) | في "1ABB 3ABBC 5AB 5AC"، "1ABB" و "3ABB" و "5AB" |
using System; using System.Text.RegularExpressions; public class Example { public static void Main() { string input = "1851 1999 1950 1905 2003"; string pattern = @"(?<=19)\d{2}\b"; foreach (Match match in Regex.Matches(input, pattern)) Console.WriteLine(match.Value); } }
محدد يحدد عدد الأمثلة التي يجب وجود العنصر السابق (يمكن أن يكون حرفًا أو مجموعة أو فئة حروف) في النص المدخل حتى يتم تطابق المثيل. وتشمل محددات العناصر اللغوية المذكورة في الجدول أدناه.
في الجدول أدناه قائمة بمحددات:
محدد | الوصف | النمط | التنسيق |
---|---|---|---|
* | التطابق مع العنصر السابق صفر مرة أو أكثر. | \d*\.\d | ".0"، "19.9"، "219.9" |
+ | التطابق مع العنصر السابق مرة واحدة أو أكثر. | "be+" | في "been" يحتوي على "bee"، وفي "bent" يحتوي على "be" |
? | التنسيق للعنصر السابق يحدث صفر مرة أو مرة واحدة. | "rai?n" | "ran"، "rain" |
{ n } | التنسيق للعنصر السابق يحدث بقدر دقيق مرة واحدة. | ",\d{3}" | في "1,043.6" يحتوي على ",043"، وفي "9,876,543,210" يحتوي على ",876"، و ",543" و ",210" |
{ n ,} | التنسيق للعنصر السابق يحدث على الأقل مرة واحدة. | "\d{2,}" | "166"، "29"، "1930" |
{ n , m } | التنسيق للعنصر السابق يحدث على الأقل مرة واحدة، ولكن لا يزيد عن m مرة. | "\d{3,5}" | "166"، "17668" في "193024" يحتوي على "19302" |
*? | التنسيق للعنصر السابق يحدث صفر مرة أو مرات متعددة، ولكن بقدر الإمكان مرة واحدة. | \d*?\.\d | ".0"، "19.9"، "219.9" |
+? | التنسيق للعنصر السابق يحدث مرة واحدة أو مرات متعددة، ولكن بقدر الإمكان مرة واحدة. | "be+?" | في "been" يحتوي على "be"، وفي "bent" يحتوي على "be" |
?? | التنسيق للعنصر السابق يحدث صفر مرة أو مرة واحدة، ولكن بقدر الإمكان مرة واحدة. | "rai??n" | "ran"، "rain" |
{ n }? | التنسيق للعنصر المقدمة يحدث بقدر دقيق مرة واحدة. | ",\d{3}?" | في "1,043.6" يحتوي على ",043"، وفي "9,876,543,210" يحتوي على ",876"، و ",543" و ",210" |
{ n ,}? | التنسيق للعنصر السابق يحدث على الأقل مرة واحدة، ولكن بقدر الإمكان مرة واحدة. | "\d{2,}?" | "166"، "29" و "1930" |
{ n , m }? | التنسيق للعنصر السابق يحدث بين n و m مرة، ولكن يحدث بقدر الإمكان مرة واحدة. | "\d{3,5}?" | "166"، "17668" في "193024" يحتوي على "193" و "024" |
الاستدلال يسمح في نفس تعبير النص النموذجي بتحديد التعبيرات الفرعية التي تم تحديدها مسبقًا.
الجدول أدناه يبين بنيات الاستدلال:
بنية الاستدلال | الوصف | النمط | التنسيق |
---|---|---|---|
\ الرقم | الاستدلال. التحقق من قيمة التعبير المعقود. | (\w)\1 | في "البحث" يحتوي على "ee" |
\k< الاسم> | الاستدلال بالاسم. التحقق من قيمة التعبير المسمى. | (?< الحرف>\w)\k< الحرف> | في "البحث" يحتوي على "ee" |
البنية البديلة تستخدم لتعديل تعبير النص النموذجي لتمكين التنسيق either/or.
الجدول أدناه يبين البنيات البديلة:
البنية البديلة | الوصف | النمط | التنسيق |
---|---|---|---|
| | التنسيق بـ(|) الرأسية (|) للعنصر أيهما كان. | th(|e|at) | "هذا اليوم. " يحتوي على "ال" و "هذا" |
(?( التعبير )نعم | لا ) | إذا تم تطابق نمط النمط بالتعبير، يتم التطابق. نعم; وإلا يتم تطابق الخيار الاختياري لا جزء. التعبير expression يُفسر كاستدلال غير نسيجي. | (?(A)A\d{2}\b|\b\d{3}\b) | في "A10 C103 910" A10 و 910 |
(?( name )نعم | لا ) | إذا كان هناك تطابق في الفئة المسمى أو الفئة المحتجزة أو المسمى بالرقم، يتم التطابق. نعم; وإلا يتم تطابق الخيار الاختياري لا. | (?< quoted>")?(?(quoted).+?"|\S+\s) | في "Dogs.jpg "Yiska playing.jpg"" Dogs.jpg و "Yiska playing.jpg" |
التبديل هو تعبير النمط المستخدم في نمط التبديل.
يُظهر الجدول أدناه الرموز المستخدمة في التبديل:
الرمز | الوصف | النمط | نمط التبديل | النص الإدخالي | النص الناتج |
---|---|---|---|---|---|
$رقم | تبديل وفقًا للفئة رقم النص المُطابق. | \b(\w+)(\s)(\w+)\b | $3$2$1 | "one two" | "two one" |
${الاسم} | تبديل وفقًا للفئة المسمى الاسم النص المُطابق. | \b(?< word1>\w+)(\s)(?< word2>\w+)\b | ${word2} ${word1} | "one two" | "two one" |
$$ | تبديل رمز "$". | \b(\d+)\s?USD | $$$1 | "103 USD" | "$103" |
$& | تبديل نسخة واحدة من التطابق الكامل. | (\$*(\d*(\.+\d+)?){1}) | **$& | "$1.30" | "**$1.30**" |
$` | تبديل جميع النصوص قبل التطابق. | B+ | $` | "AABBCC" | "AAAACC" |
$' | تبديل جميع النصوص بعد التطابق. | B+ | $' | "AABBCC" | "AACCCC" |
$+ | تبديل آخر مجموعة محتجزة. | B+(C+) | $+ | "AABBCCDD" | AACCDD |
$_ | تبديل النص الإدخالي بالكامل. | B+ | $_ | "AABBCC" | "AAAABBCCCC" |
يُظهر الجدول أدناه مجموعة متنوعة من بناءات الم杂物:
البناء | الوصف | النموذج |
---|---|---|
(?imnsx-imnsx) | يمكن تعيين أو تعطيل الخيارات مثل عدم التمييز بين الأحرف الكبيرة والصغيرة في وسط النمط. | \bA(?i)b\w+\b matches "ABA Able Act" with "ABA" and "Able" |
(?#comment) | تعليقات داخلة. تنتهي هذه التعليقات عند أول قوس موازي م закрыم. | \bA(?#matches words starting with A)\w+\b |
# [نهاية السطر] | التعليقات تبدأ بمفتاح # غير المترجم، وتستمر حتى نهاية السطر. | (?x)\bA\w+\b#للتمثيل الكلمات التي تبدأ بحرف A) |
يستخدم الفئة Regex لتمثيل نموذج نصي عادي.
في الجدول أدناه، يتم عرض بعض الطرق الشائعة لـ Regex:
الترقيم | الطريقة & الوصف |
---|---|
1 | public bool IsMatch(
string input
) يحدد إذا كانت النصوص العادية المحددة تجد تطابقًا في النص المدخل المحدد. |
2 | public bool IsMatch(
string input,
int startat
) يحدد إذا كانت النصوص العادية المحددة تجد تطابقًا في النص المدخل المحدد، من الموقع المحدد في النص. |
3 | public static bool IsMatch(
string input,
string pattern
) يحدد إذا كانت النصوص العادية المحددة تجد تطابقًا في النص المدخل المحدد. |
4 | public MatchCollection Matches(
string input
) يبحث في جميع الصفوف التي تتطابق مع النصوص العادية المحددة في النص المدخل. |
5 | public string Replace(
string input,
string replacement
) يستبدل جميع الصفوف التي تتطابق مع نموذج النصوص العادي المحدد في النص المدخل بالصفة المحددة. |
6 | public string[] Split(
string input
) يقوم بتقسيم النص المدخل إلى مجموعة من الأجزاء البنائية بناءً على مواقع التموضع المحددة في نموذج النصوص العادي المحدد في بناء Regex. |
للحصول على قائمة كاملة بخصائص Regex، يرجى الرجوع إلى وثائق C# من Microsoft.
في المثال التالي، يتم تطابق الكلمات التي تبدأ بحرف 'S':
عندما يتم تجميع وكود وتنفيذه، سيتم إنتاج النتيجة التالية:
Matching words that start with 'S': The Expression: \bS\S* Splendid Suns
في هذا المثال يتم تطابق الكلمات التي تبدأ ب 'm' وتنتهي ب 'e':
using System; using System.Text.RegularExpressions; namespace RegExApplication { class Program { private static void showMatch(string text, string expr) { Console.WriteLine("The Expression: " + expr); MatchCollection mc = Regex.Matches(text, expr); foreach (Match m in mc) { Console.WriteLine(m); } } static void Main(string[] args) { string str = "make maze and manage to measure it"; Console.WriteLine("Matching words start with 'm' and ends with 'e':"); showMatch(str, @"\bm\S*e\b"); Console.ReadKey(); } } }
عندما يتم تجميع وكود وتنفيذه، سيتم إنتاج النتيجة التالية:
Matching words start with 'm' and ends with 'e': The Expression: \bm\S*e\b صنع حلقة إدارة قياس
في هذا المثال يتم استبدال الفراغات الزائدة:
using System; using System.Text.RegularExpressions; namespace RegExApplication { class Program { static void Main(string[] args) { string input = "Hello World "; string pattern = "\\s+"; string replacement = " "; Regex rgx = new Regex(pattern); string result = rgx.Replace(input, replacement); Console.WriteLine("النص الأصلي: {0}", input); Console.WriteLine("النص البديل: {0}", result); Console.ReadKey(); } } }
عندما يتم تجميع وكود وتنفيذه، سيتم إنتاج النتيجة التالية:
النص الأصلي: Hello World النص البديل: Hello World