سلاسل

*This content is translated using AI (Beta) and may contain errors. To view this page in English, click here.

نوع بيانات السلسلة هو تسلسل من الأحرف، مثل الحروف والأرقام والرموز. إنه نوع البيانات لتخزين معظم المعلومات النصية.

إعلان السلاسل

لإعلان عن متغير سلسلة، ضع علامات الاقتباس حول الأحرف. من الأكثر شيوعًا استخدام علامات الاقتباس المزدوجة (")، ولكن علامات الاقتباس المفردة (') تعمل أيضًا. إذا كنت تريد تضمين علامة اقتباس مفردة أو مزدوجة في سلسلتك، فقم بإحاطة سلسلتك بنوع الاقتباس الآخر، أو استخدم اقتباس مهرب.


local string1 = "مرحبا بالعالم!"
print(string1) --> مرحبا بالعالم!
local string2 = 'مرحبا "بالعالم"!'
print(string2) --> مرحبا "بالعالم"!

لتضمين كل من علامات الاقتباس المفردة والمزدوجة في سلسلة، أو لإنشاء سلاسل متعددة الأسطر، قم بالإعلان عنها باستخدام أقواس مزدوجة:


local string1 = [[مرحبا
بالعالم!
مرحبا "بالعالم"!
مرحبا 'بالعالم'!]]
print(string1)
--> مرحبا
--> بالعالم!
--> مرحبا "بالعالم"!
--> مرحبا 'بالعالم'!

إذا لزم الأمر، يمكنك تضمين أقواس متعددة داخل سلسلة باستخدام نفس عدد علامات المساواة في كل من القوس الأول والأخير:


local string1 = [=[مرحبا
[[بالعالم!]]
]=]
print(string1)
--> مرحبا
--> [[بالعالم!]]

دمج السلاسل

لدمج السلاسل، قم بـ ربطها بنقطتين (..). ربط السلاسل لا يدرج فراغاً بينها، لذا ستحتاج إلى تضمين فراغات في نهاية/بداية سلسلة سابقة/لاحقة، أو ربط فراغ بين السلسلتين.


local hello = "مرحبا"
local helloWithSpace = "مرحبا "
local world = "بالعالم!"
local string1 = hello .. world
local string2 = helloWithSpace .. world
local string3 = hello .. " " .. world
print(string1) --> مرحبًا بالعالم!
print(string2) --> مرحبا بالعالم!
print(string3) --> مرحبا بالعالم!

لاحظ أن أمر print() يأخذ عدة معطيات ويمزجها مع مسافات، لذا يمكنك استخدام ، بدلاً من .. للحصول على مسافات في مخرجات print().


local hello = "مرحبا"
local world = "بالعالم"
local exclamationMark = "!"
print(hello .. world .. exclamationMark) --> مرحبا بالعالم!
print(hello, world .. exclamationMark) --> مرحبا بالعالم!
print(hello, world, exclamationMark) --> مرحبا بالعالم!

تحويل السلاسل

لتحويل سلسلة إلى رقم، استخدم دالة tonumber(). إذا كانت السلسلة لا تحتوي على تمثيل رقمي، فترجع tonumber() nil.


local numericString = "123"
print(tonumber(numericString)) --> 123
local alphanumericString = "مرحبا123"
print(tonumber(alphanumericString)) --> nil

اقتباسات السلاسل

للهروب من علامة اقتباس مزدوجة أو مفردة في إعلان سلسلة وتضمين أي حرف تقريبًا، ضع شرطة مائلة (\) قبل الحرف. على سبيل المثال:

  • لتضمين علامة اقتباس مفردة في سلسلة محددة بعلامات اقتباس مفردة، استخدم \'.
  • لتضمين علامة اقتباس مزدوجة في سلسلة محددة بعلامات اقتباس مزدوجة، استخدم \".

local string1 = 'مرحبا \'بالعالم\'!'
print(string1) --> مرحبا 'بالعالم'!
local string2 = "مرحبا \"بالعالم\"!"
print(string2) --> مرحبا "بالعالم"!

بعض الأحرف التي تأتي بعد الشرائط المائلة تنتج أحرف خاصة بدلاً من الأحرف الهاربة:

  • لتضمين سطر جديد، استخدم \n.
  • لتضمين علامة تبويب أفقية، استخدم \t.

local string1 = "مرحبا\nبالعالم!"
print(string1)
--> مرحبا
--> بالعالم!
local string2 = "مرحبا\tبالعالم!"
print(string2) --> مرحبا بالعالم!

إدراج السلاسل

يدعم Luau إدراج السلاسل، وهي ميزة تتيح لك إدراج تعبيرات في السلاسل. استخدم الأشرطة الخلفية (`) لإعلان سلسلة مدرجة، ثم أضف التعبيرات داخل الأقواس المعقوفة:


local world = "بالعالم"
local string1 = `مرحبا {world}!`
print(string1) --> مرحبا بالعالم!

على الرغم من أن المتغيرات هي الاستخدام الأكثر شيوعًا، يمكنك استخدام أي تعبير، بما في ذلك العمليات الرياضية:


local world = "بالعالم"
local number = 1
local letters = {"ب", "ع", "ا", "ل", "م"}
local string1 = `مرحبا {world}, {number} مرة!`
local string2 = `مرحبا {world}, {number + 1} مرات!`
local string3 = `مرحبا {table.concat(letters)} مرة ثالثة!`
print(string1) --> مرحبا بالعالم، 1 مرة!
print(string2) --> مرحبا بالعالم، 2 مرات!
print(string3) --> مرحبا بالعالم مرة ثالثة!

تطبق قواعد الهروب القياسية على الأشرطة الخلفية، والأقواس المعقوفة، والشرائط المائلة:


local string1 = `مرحبا \`\{world\}\`!`
print(string1) --> مرحبا `{world}`!

تحويل رياضي

إذا قمت بإجراء عمليات رياضية على سلسلة، فإن Luau يقوم تلقائيًا بتحويل السلسلة إلى رقم. إذا كانت السلسلة لا تحتوي على تمثيل رقمي، يحدث خطأ.


print("55" + 10) --> 65
print("55" - 10) --> 45
print("55" * 10) --> 550
print("55" / 10) --> 5.5
print("55" % 10) --> 5
print("مرحبا" + 10) --> print("مرحبا" + 10):1: attempt to perform arithmetic (add) on string and number

المقارنات

يمكن مقارنة السلاسل باستخدام العمليات <، <=، > و >= التي تقارن باستخدام ترتيب قوامي بناءً على رموز ASCII لكل حرف في سلسلة. سوف ينتج عن ذلك عدم مقارنة الأرقام في السلاسل بشكل صحيح، على سبيل المثال، "100" ستكون أقل من "20"، حيث إن بايتات "0" و "1" لها رموز ASCII أقل من بايت "2".


print("تفاح" < "تفاحه") --> true
print("موز" < "تفاحه") --> true (م هو قبل ا في ASCII)
print("رقم100" < "رقم20") --> true

مرجع نمط السلسلة

نمط السلسلة هو مزيج من الأحرف يمكنك استخدامه مع string.match()، string.gmatch()، ووظائف أخرى للبحث عن قطعة، أو جزء فرعي، من سلسلة أطول.

المطابقات المباشرة

يمكنك استخدام المطابقات المباشرة في دالة Luau مثل string.match()، باستثناء الأحرف السحرية. على سبيل المثال، هذه الأوامر تبحث عن الكلمة Roblox داخل سلسلة:


local match1 = string.match("مرحبًا بكم في Roblox!", "Roblox")
local match2 = string.match("مرحبًا بكم في لعبتي الرائعة!", "Roblox")
print(match1) --> Roblox
print(match2) --> nil

فئات الحروف

فئات الحروف ضرورية للبحث عن السلاسل الأكثر تقدمًا. يمكنك استخدامها للبحث عن شيء ليس بالضرورة متحديد بحرف معين ولكن يندرج ضمن فئة معروفة (فئة)، بما في ذلك الحروف، الأرقام، المسافات، علامات الترقيم، والمزيد.

توضح الجدول التالي فئات الحروف الرسمية لأنماط سلاسل Luau:

فئةتمثلمثال للمطابقة
.أي حرف32kasGJ1%fTlk?@94
%aحرف كبير أو صغيرaBcDeFgHiJkLmNoPqRsTuVwXyZ
%lحرف صغيرabcdefghijklmnopqrstuvwxyz
%uحرف كبيرABCDEFGHIJKLMNOPQRSTUVWXYZ
%dأي رقم (عدد)0123456789
%pأي حرف علامات ترقيم!@#;,.
%wحرف أبجدي رقمي (إما حرف أو رقم)aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789
%sمسافة أو حرف مسافة فارغة ، \n، و \r
%cحرف تحكم خاص control character
%xحرف سداسي عشري0123456789ABCDEF
%zحرف NULL (\0)

بالنسبة لفئات الحروف ذات الحرف الواحد مثل %a و %s، يمثل الحرف الكبير المقابل "النوع المعاكس" للفئة. على سبيل المثال، %p يمثل حرف علامة الترقيم بينما %P يمثل جميع الحروف باستثناء علامات الترقيم.

الأحرف السحرية

هناك 12 "حرف سحري" محجوز لأغراض خاصة في الأنماط:

$%^*()
.[]+-?

يمكنك الهروب والبحث عن الأحرف السحرية باستخدام الرمز %. على سبيل المثال، للبحث عن roblox.com، قم بهروب رمز . (النقطة) من خلال وضع % أمامه كما في %..


-- "roblox.com" يناسب "roblox#com" لأن النقطة تفسر على أنها "أي حرف"
local match1 = string.match("ما هو roblox#com؟", "roblox.com")
print(match1) --> roblox#com
-- اهرب من النقطة باستخدام % بحيث تُفسر على أنها حرف نقطة حرفي
local match2 = string.match("أنا أحب roblox.com!", "roblox%.com")
print(match2) --> roblox.com

المثبتات

يمكنك البحث عن نمط في بداية أو نهاية سلسلة باستخدام الرمزين ^ و $.


local start1 = string.match("الأول الثاني الثالث", "^الأول") -- يناسب لأن "الأول" في البداية
print(start1) --> الأول
local start2 = string.match("الثالث الثاني الأول", "^الأول") -- لا يناسب لأن "الأول" ليس في البداية
print(start2) --> nil
local end1 = string.match("الأول الثاني الثالث", "الثالث$") -- يناسب لأن "الثالث" في النهاية
print(end1) --> الثالث
local end2 = string.match("الثالث الثاني الأول", "الثالث$") -- لا يناسب لأن "الثالث" ليس في النهاية
print(end2) --> nil

يمكنك أيضًا استخدام كليهما ^ و $ معًا لضمان أن النمط يناسب السلسلة الكاملة وليس مجرد جزء منها.


-- باستخدام كل من ^ و $ لمطابقة عبر سلسلة كاملة
local match1 = string.match("Roblox", "^Roblox$") -- يناسب لأن "Roblox" هو السلسلة الكاملة (التساوي)
print(match1) --> Roblox
local match2 = string.match("ألعب Roblox", "^Roblox$") -- لا يناسب لأن "Roblox" ليس في البداية AND النهاية
print(match2) --> nil
local match3 = string.match("ألعب Roblox", "Roblox") -- يناسب لأن "Roblox" موجودة داخل "ألعب Roblox"
print(match3) --> Roblox

المعدلات الفئوية

بحد ذاتها، فئة الحرف تتطابق فقط مع حرف واحد في سلسلة. على سبيل المثال، النمط التالي ("%d") يبدأ في قراءة السلسلة من اليسار إلى اليمين، ويعثر على أول رقم (2)، ثم يتوقف.


local match = string.match("مملكة السحاب لديها 25 جوهرة طاقة", "%d")
print(match) --> 2

يمكنك استخدام معدلات مع أي فئة حرف للتحكم في النتيجة:

المعدّلالمعنى
+مطابقة 1 أو أكثر من فئة الحرف السابقة
-مطابقة أقل ما يمكن من فئة الحرف السابقة
*مطابقة 0 أو أكثر من فئة الحرف السابقة
?مطابقة 1 أو أقل من فئة الحرف السابقة
%nلـ n بين 1 و 9، تطابق جزء فرعي يساوي n السلسلة الملتقطة.
%bxyالمطابقة المتوازنة التي تطابق x، y، وكل شيء بينهما (على سبيل المثال، %b() تطابق زوج من الأقواس وكل شيء بينها)

إضافة معدل إلى نفس النمط ("%d+" بدلاً من "%d")، ينتج 25 بدلاً من 2:


local match1 = string.match("مملكة السحاب لديها 25 جوهرة طاقة", "%d")
print(match1) --> 2
local match2 = string.match("مملكة السحاب لديها 25 جوهرة طاقة", "%d+")
print(match2) --> 25

مجموعات الفئات

يجب استخدام المجموعات عندما لا تستطيع فئة حرف واحدة القيام بكل الوظيفة. على سبيل المثال، قد ترغب في مطابقة كل من الحروف الصغيرة (%l) وعلامات الترقيم (%p) باستخدام نمط واحد.

تُعرف المجموعات بواسطة الأقواس [] حولها. في المثال التالي، لاحظ الفرق بين استخدام مجموعة ("[%l%p]+") و عدم استخدام مجموعة ("%l%p+").


local match1 = string.match("مرحبًا!!! أنا سلسلة أخرى.", "[%l%p]+") -- مجموعة
print(match1) --> مرحبًا!!!
local match2 = string.match("مرحبًا!!! أنا سلسلة أخرى.", "%l%p+") -- غير مجموعة
print(match2) --> ر!!!

الأمر الأول (المجموعة) يخبر Luau للعثور على كل من الحروف الصغيرة وعلامات الترقيم. مع إضافة المعدل + بعد المجموعة بأكملها، يجد كل تلك الأحرف (مرحبًا!!!)، ويتوقف عندما يصل إلى المسافة.

في الأمر الثاني (غير المجموعة)، ينطبق المعدل + فقط على فئة %p التي قبلها، لذا فإن Luau يلتقط فقط أول حرف صغير (ر) قبل سلسلة علامات الترقيم (!!!).

مثل فئات الحروف، يمكن أن تكون المجموعات "معاكسة" لأنفسها. يتم ذلك بإضافة حرف ^ في بداية المجموعة، مباشرة بعد الأقواس الافتتاحية [. على سبيل المثال، "[%p%s]+" تمثل كل من علامات الترقيم والمسافات، بينما "[^\p%s]+" تمثل جميع الأحرف باستثناء علامات الترقيم والمسافات.

تدعم المجموعات أيضًا المدى التي تتيح لك العثور على مجموعة كاملة من المطابقات بين حرف بداية ونهاية. هذه ميزة متقدمة يتم توضيحها بمزيد من التفصيل في دليل Lua 5.1.

التقاط السلسلة

الالتقاطات في السلسلة هي أنماط فرعية ضمن نمط. هذه محاطة بأقواس () وتستخدم للحصول (لتقจับ) جزئيات المطابقة وحفظها في متغيرات. على سبيل المثال، يحتوي النمط التالي على تقاطين، (%a+) و (%d+)، اللتان ترجعان جزئين upon match ناجح.


local pattern = "(%a+)%s?=%s?(%d+)"
local key1, val1 = string.match("واحد وعشرون = 21", pattern)
print(key1, val1) --> واحد وعشرون 21
local key2, val2 = string.match("ألفي= 2000", pattern)
print(key2, val2) --> ألفي 2000
local key3, val3 = string.match("مليون=1000000", pattern)
print(key3, val3) --> مليون 1000000

تعتبر الكمية ? التي تتبع كل من كلاس %s إضافة آمنة لأنها تجعل المسافة في كل من جانبي علامة = اختيارية. هذا يعني أن المطابقة تنجح إذا كانت إحدى المسافتين (أو كلاهما) مفقودة حول علامة المساواة.

في دالة string.gsub()، يمكنك تضمين مجموعات الالتقاط في سلسلة الاستبدال باستخدام %1، %2، %3، وما إلى ذلك، حتى %9. على الرغم من أن Luau يدعم حتى 32 مجموعة التقاط قبل أن يحدث خطأ، إلا أنه يمكنك فقط الإشارة إلى التسعة الأولى بهذه الصيغة:


local str = "حب2العب Roblox"
local pattern = "(%w+)(%d+)(%w+)%s+(%w+)"
local replacement = "أنا %1 %2 %3 %4!"
local result = string.gsub(str, pattern, replacement)
print(result) --> أنا حب 2 العب Roblox!

يمكنك أيضًا تعشيق التقاطات السلسلة:


local places = "مملكة السحاب رائعة، مملكة الغابة سلمية"
local pattern = "(الحب%s(%a+%sKingdom)[%w%s]+)"
for description, kingdom in string.gmatch(places, pattern) do
print(description)
print(kingdom)
end
--> مملكة السحاب رائعة
--> مملكة السحاب
--> مملكة الغابة سلمية
--> مملكة الغابة

تعمل عملية البحث هذه كما يلي:

تبحث المكرر string.gmatch() عن مطابقة على النمط الكامل "الوصف" المحدد بواسطة أزواج الأقواس الخارجية. يتوقف هذا عند الفاصلة الأولى ويلتقط ما يلي:

#النمطالالتقاط
1(الحب%s(%a+%sKingdom)[%w%s]+)مملكة السحاب رائعة

باستخدام الالتقاط الأول الناجح، يبحث المكرر مرة أخرى عن مطابقة على "مملكة" بالنمط الذي حددته الأزواج الداخلية من الأقواس. يلتقط هذا النمط المتداخل ببساطة ما يلي:

#النمطالالتقاط
2(%a+%sKingdom)مملكة السحاب

ثم يعود المكرر ويستمر في البحث في السلسلة الكاملة، ملتقطًا ما يلي:

#النمطالالتقاط
3(الحب%s(%a+%sKingdom)[%w%s]+)مملكة الغابة سلمية
4(%a+%sKingdom)مملكة الغابة

بالإضافة إلى كل ما سبق، هناك حالة خاصة مع التقاط فارغ (()). إذا كان الالتقاط فارغًا، فسيتم التقاط الموقع في السلسلة:


local match1 = "أين يحدث الالتقاط؟ من يدري!"
local match2 = "هذه السلسلة أطول من الأولى. أين يحدث الالتقاط؟ من يدري؟!"
local pattern = "()أين يحدث الالتقاط%؟ من يدري!()"
local start1, finish1 = string.match(match1, pattern)
print(start1, finish1) --> 1 42
local start2, finish2 = string.match(match2, pattern)
print(start2, finish2) --> 43 84

يمكن أن يتم تعشيق هذه الالتقاطات الخاصة مثل العادية:


local places = "مملكة السحاب رائعة، مملكة الغابة سلمية."
local pattern = "مملكة (%a+()) ملك المملكة"
for kingdom, position in string.gmatch(places, pattern) do
print(kingdom, position)
end
--> رائعة 10
--> سلمية 42

تكون القيم المرجعة غير عادية لأنها أرقام بدلاً من سلاسل:


local match = "هذه مثال"
local pattern = "هذه ()مثال"
local position = string.match(match, pattern)
print(typeof(position)) --> رقم
©2026 شركة Roblox Corporation. تُعد منصّة Roblox، وشعار Roblox وشعار "توسيع حدود المخيلة"، من ضمن علاماتنا التجارية المسجّلة وغير المسجّلة في الولايات المتحدة وبلدان أخرى.