English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Scala تستخدم scala.util.matching للحصول على Regex فئة لدعم تعبيرات النصوص. يوضح هذا المثال استخدام تعبيرات النصوص للبحث عن الكلمات. Scala :
import scala.util.matching.Regex object Test { def main(args: Array[String]) { val pattern = "Scala".r val str = "Scala is Scalable and cool" println(pattern findFirstIn str) } }
تنفيذ الكود أعلاه، الناتج سيكون:
$ scalac Test.scala $ scala Test Some(Scala)
في المثال، تم استخدام طريقة r() من فئة String لإنشاء كائن Regex.
ثم استخدم طريقة findFirstIn لتحديد الم matchة الأولى.
إذا كنت بحاجة إلى عرض جميع الم匹配ات، يمكنك استخدام طريقة findAllIn.
يمكنك استخدام طريقة mkString( ) لربط النصوص التي تم تطابقها في تعبير النصوص، ويمكنك استخدام | لتحديد نماذج مختلفة:
import scala.util.matching.Regex object Test { def main(args: Array[String]) { val pattern = new Regex("(S|s)cala") // يمكن أن تكون الأحرف الأولى كبيرة أو صغيرة S أو s val str = "Scala is scalable and cool" println((pattern findAllIn str).mkString(",")) // تستخدم علامة الاستفهام , لربط النتائج } }
تنفيذ الكود أعلاه، الناتج سيكون:
$ scalac Test.scala $ scala Test Scala,scala
إذا كنت بحاجة إلى استبدال النصوص المدخلة بمفتاح مخصص، يمكنك استخدام replaceFirstIn( ) يستخدم هذا الطريقة لتبديل الم匹配ة الأولى، باستخدام replaceAllIn( ) يستخدم هذا الطريقة لتبديل جميع الم匹配ات، مثل ما يلي:
object Test { def main(args: Array[String]) { val pattern = "(S|s)cala".r val str = "Scala is scalable and cool" println(pattern replaceFirstIn(str, "Java")) } }
تنفيذ الكود أعلاه، الناتج سيكون:
$ scalac Test.scala $ scala Test Java is scalable and cool
تعتمد تعبيرات النصوص في Scala على قواعد جافا، والكثير من جافا يستخدم قواعد لغة Perl.
في الجدول أدناه، قمنا بتقديم بعض القواعد الشائعة للعبارات التقليدية:
التعبير | قواعد التطابق |
---|---|
^ | تتطابق مع موضع بداية النص المدخل. |
$ | تتطابق مع موضع نهاية النص المدخل. |
. | مطابق أي حرف غير "\r\n" |
[...] | مجموعة النصوص. تتطابق مع أي حرف من المدرج. على سبيل المثال، "[abc]" تتطابق مع "a" في "plain". |
[^...] | مجموعة النصوص العكسية. تتطابق مع أي حرف غير مدرج. على سبيل المثال، "[^abc]" تتطابق مع "plain" في "p"، "l"، "i"، "n". |
\\A | مطابق بداية النص (بدون دعم لعدة أسطر) |
\\z | نهاية السلسلة (مثل $، ولكن لا يتأثر بتحويل الأعمدة) |
\\Z | نهاية السلسلة أو نهاية السطر (لا يتأثر بتحويل الأعمدة) |
re* | تكرار صفر مرة أو أكثر |
re+ | تكرار مرة واحدة أو أكثر |
re? | تكرار صفر مرة أو مرة واحدة |
re{ n} | تكرار n مرة |
re{ n,} | تكرار n مرة أو أكثر |
re{ n, m} | تكرار n إلى m مرة |
a|b | مطابق a أو b |
(re) | مطابق re، ويتم التقاطع مع النص في المجموعة المحددة تلقائيًا |
(?: re) | مطابق re، دون التقاطع مع النص الم匹配، ولا تعطي هذا المجموعة رقم |
(?> re) | العبرة غير الجائزة |
\\w | مطابق الحرف أو الرقم أو الخط الفرعي أو الحرف الصيني |
\\W | مطابق أي حرف غير حرف، رقم، خط فرعي، أو حرف صيني |
\\s | مطابق أي حرف فراغ، يساوي [\t\n\r\f] |
\\S | مطابق أي حرف غير حرف فراغ |
\\d | مطابق الرقم، مثل [0-9] |
\\D | مطابق أي حرف غير رقم |
\\G | بداية البحث الحالية |
\\n | الخط الفاصل |
\\b | عادة موضع الفصل بين الكلمات، ولكن إذا تم استخدامه في مجموعة من الأحرف يمثل الرجوع للوراء |
\\B | مطابق غير موقع بداية أو نهاية الكلمة |
\\t | التبويب |
\\Q | بداية العلامة المقدسة:\Q(a+b)*3\E يمكنه تطابق النص "(a+b)*3". |
\\E | نهاية العلامة المقدسة:\Q(a+b)*3\E يمكنه تطابق النص "(a+b)*3". |
مثال | الوصف |
---|---|
. | مطابق أي حرف غير "\r\n" |
[Rr]uby | مطابق "Ruby" أو "ruby" |
rub[ye] | مطابق "ruby" أو "rube" |
[aeiou] | مطابق الحروف الصغيرة :aeiou |
[0-9] | مطابق أي رقم، مثل [0123456789] |
[a-z] | مطابق أي حرف صغير ASCII |
[A-Z] | مطابق أي حرف كبير ASCII |
[a-zA-Z0-9] | مطابق الرقم، الحروف الكبيرة، الحروف الصغيرة |
[^aeiou] | مطابق أي حرف غير aeiou |
[^0-9] | مطابق أي حرف غير رقم |
\\d | مطابق الرقم، مثل: [0-9] |
\\D | مطابق غير الرقم، مثل: [^0-9] |
\\s | مطابق الفضاء، مثل: [ \t\r\n\f] |
\\S | مطابق غير الفضاء، مثل: [^ \t\r\n\f] |
\\w | مطابق الحروف، الأرقام، الخط الفرعي، مثل: [A-Za-z0-9_] |
\\W | مطابق التكوين غير الحروف، الأرقام، الخط الفرعي، مثل: [^A-Za-z0-9_] |
ruby? | التنسيق "rub" أو "ruby": y هو اختياري |
ruby* | التنسيق "rub" مع 0 أو أكثر من y. |
ruby+ | التنسيق "rub" مع 1 أو أكثر من y. |
\\d{3} | التنسيق 3 أرقام فقط. |
\\d{3,} | التنسيق 3 أو أكثر من الأرقام. |
\\d{3,5} | التنسيق 3 أو 4 أو 5 أرقام. |
\\D\\d+ | بدون فرز: + تكرار \d |
(\\D\\d)+/ | الفرز: + تكرار \D\d |
([Rr]uby(, )?)+ | التنسيق "Ruby"، "Ruby, ruby, ruby"، وما إلى ذلك |
لاحظ أن كل رمز استخدمت فيه إثنتين من الأسهم العكسية. هذا لأن الأسهم العكسية في سلاسل Java وScala هي معرفات مسبقة. لذا إذا كنت ترغب في إخراج \، يجب عليك كتابة \\ في السلسلة للحصول على سهم عكسية واحدة. انظر إلى المثال التالي:
import scala.util.matching.Regex object Test { def main(args: Array[String]) { val pattern = new Regex("abl[ae]\\d+") val str = "ablaw is able1 and cool" println((pattern findAllIn str).mkString(",")) } }
تنفيذ الكود أعلاه، الناتج سيكون:
$ scalac Test.scala $ scala Test able1