السلاسل النصية (علوم الحاسوب)

رسم تخطيطي لبيانات السلاسل النصية في الحوسبة. يوضح كلمة "مثال" حيث يُمثل كل حرف في مربع منفصل. كلمة "سلسلة نصية" في الأعلى، وتشير إلى الجملة بأكملها. أما تسمية "حرف" فتقع في الأسفل وتشير إلى مربع منفصل.
تتكون السلاسل عادةً من أحرف ، وغالبًا ما تستخدم لتخزين البيانات التي يمكن قراءتها من قبل البشر، مثل الكلمات أو الجمل.

في برمجة الحاسوب ، تُعرَّف السلسلة تقليديًا بأنها تسلسل من الأحرف، إما كقيمة ثابتة أو كمتغير . يسمح المتغير بتغيير عناصر السلسلة وطولها ، أو قد يكون ثابتًا بعد إنشائها. غالبًا ما تُنفَّذ السلسلة كبنية بيانات مصفوفة من البايتات (أو الكلمات ) التي تخزن تسلسلًا من العناصر، عادةً الأحرف، باستخدام ترميز أحرف معين . وبشكل أعم، قد تشير السلسلة أيضًا إلى تسلسل (أو قائمة ) من البيانات غير الأحرف فقط.

اعتمادًا على لغة البرمجة ونوع البيانات المحدد المستخدم، قد يؤدي تعريف متغير على أنه سلسلة نصية إما إلى تخصيص مساحة تخزين ثابتة في الذاكرة لطول أقصى محدد مسبقًا أو استخدام التخصيص الديناميكي للسماح له باحتواء عدد متغير من العناصر.

عندما يظهر نص حرفيًا في شفرة المصدر ، يُعرف باسم النص الحرفي أو النص المجهول. [ 1 ]

في اللغات الرسمية ، التي تستخدم في المنطق الرياضي وعلوم الحاسوب النظرية ، فإن السلسلة عبارة عن تسلسل محدود من الرموز التي يتم اختيارها من مجموعة تسمى الأبجدية .

غاية

تتمثل إحدى الأغراض الرئيسية للسلاسل النصية في تخزين النصوص القابلة للقراءة البشرية، مثل الكلمات والجمل. تُستخدم السلاسل النصية لنقل المعلومات من برنامج حاسوبي إلى مستخدم البرنامج. [ 2 ] قد يقبل البرنامج أيضًا مدخلات نصية من المستخدم. علاوة على ذلك، قد تخزن السلاسل النصية بيانات مُعبر عنها بأحرف ولكنها غير مُخصصة للقراءة البشرية.

أمثلة على السلاسل النصية وأغراضها:

  • رسالة مثل " file upload complete" هي سلسلة نصية يعرضها البرنامج للمستخدمين النهائيين . في شفرة المصدر للبرنامج ، من المرجح أن تظهر هذه الرسالة كسلسلة نصية حرفية .
  • نص يُدخله المستخدم، مثل " I got a new job today" كتحديث للحالة على خدمة التواصل الاجتماعي . بدلاً من نص حرفي، من المرجح أن يقوم البرنامج بتخزين هذا النص في قاعدة بيانات .
  • البيانات الأبجدية، مثل " AGATGCCGT" التي تمثل تسلسلات الأحماض النووية للحمض النووي . [ 3 ]
  • إعدادات أو معلمات الكمبيوتر، مثل " " كسلسلة استعلام?action=edit URL . غالبًا ما يُقصد بها أن تكون قابلة للقراءة البشرية إلى حد ما، على الرغم من أن الغرض الأساسي منها هو التواصل مع أجهزة الكمبيوتر.

قد يشير مصطلح "سلسلة" أيضًا إلى تسلسل من البيانات أو سجلات الحاسوب بخلاف الأحرف - مثل "سلسلة من البتات " - ولكن عند استخدامه دون تحديد، فإنه يشير إلى سلاسل من الأحرف. [ 4 ]

تاريخ

يعود استخدام كلمة "سلسلة" للدلالة على أي عناصر مرتبة في خط أو سلسلة أو تسلسل إلى قرون مضت. [ 5 ] [ 6 ] في مجال الطباعة في القرن التاسع عشر، استخدم عمال الطباعة مصطلح "سلسلة" للدلالة على طول الحروف المطبوعة على الورق؛ وكان يتم قياس هذه السلسلة لتحديد أجر عامل الطباعة. [ 7 ] [ 4 ] [ 8 ]

إن استخدام كلمة "سلسلة" بمعنى "تسلسل من الرموز أو العناصر اللغوية بترتيب محدد" قد نشأ من الرياضيات والمنطق الرمزي والنظرية اللغوية للتحدث عن السلوك الرسمي للأنظمة الرمزية، بغض النظر عن معنى الرموز. [ 4 ]

على سبيل المثال، كتب عالم المنطق سي آي لويس في عام 1918: [ 9 ]

النظام الرياضي هو أي مجموعة من سلاسل العلامات المميزة، حيث تُؤخذ بعض هذه السلاسل مبدئيًا، ويُشتق الباقي منها عبر عمليات تُجرى وفقًا لقواعد مستقلة عن أي معنى مُسند للعلامات. ولا يُعتدّ بكون النظام يتكون من "علامات" بدلًا من أصوات أو روائح.

وفقًا لجين إي. ساميت ، كانت لغة COMIT في الخمسينيات من القرن الماضي "أول لغة واقعية لمعالجة السلاسل ومطابقة الأنماط" لأجهزة الكمبيوتر ، تلتها لغة SNOBOL في أوائل الستينيات. [ 10 ]

أنواع بيانات السلاسل النصية

نوع بيانات السلسلة النصية هو نوع بيانات مُصمّم على غرار مفهوم السلسلة النصية الرسمية. تُعدّ السلاسل النصية من أنواع البيانات المهمة والمفيدة لدرجة أنها مُطبّقة في جميع لغات البرمجة تقريبًا . في بعض اللغات، تتوفر كأنواع أساسية ، وفي لغات أخرى كأنواع مُركّبة . يسمح بناء جملة معظم لغات البرمجة عالية المستوى بتمثيل سلسلة نصية، عادةً ما تكون مُحاطة بعلامات اقتباس بطريقة ما، كمثال على نوع بيانات السلسلة النصية؛ تُسمى هذه السلسلة النصية المُعرّفة "نصًا حرفيًا" أو "نصًا حرفيًا" .

طول السلسلة

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

ترميز الأحرف

لطالما خصصت أنواع بيانات السلاسل بايتًا واحدًا لكل حرف، وعلى الرغم من اختلاف مجموعة الأحرف الدقيقة باختلاف المناطق، إلا أن ترميزات الأحرف كانت متشابهة بما يكفي ليتمكن المبرمجون غالبًا من تجاهل هذا الأمر، نظرًا لأن الأحرف التي يعاملها البرنامج بشكل خاص (مثل النقطة والمسافة والفاصلة) كانت في نفس الموضع في جميع الترميزات التي سيواجهها البرنامج. وكانت مجموعات الأحرف هذه تستند عادةً إلى ASCII أو EBCDIC . وإذا عُرض نصٌّ بترميزٍ ما على نظامٍ يستخدم ترميزًا مختلفًا، فغالبًا ما كان النص يُشوَّه ، وإن كان غالبًا ما يكون مقروءًا إلى حدٍّ ما، وقد تعلّم بعض مستخدمي الحاسوب قراءة النص المشوه.

تحتاج اللغات التصويرية مثل الصينية واليابانية والكورية (المعروفة مجتمعةً باسم CJK ) إلى أكثر بكثير من 256 حرفًا (الحد الأقصى لترميز بايت واحد لكل حرف، 8 بت) لتمثيلها بشكل معقول. تضمنت الحلول التقليدية استخدام تمثيلات أحادية البايت لرموز ASCII وتمثيلات ثنائية البايت لرموز CJK . أدى استخدام هذه الحلول مع التعليمات البرمجية الموجودة إلى مشاكل في مطابقة السلاسل النصية وقصها، وتفاوتت حدة هذه المشاكل تبعًا لتصميم ترميز الأحرف. تضمن بعض الترميزات، مثل عائلة EUC، أن قيمة البايت في نطاق ASCII ستمثل حرف ASCII هذا فقط، مما يجعل الترميز آمنًا للأنظمة التي تستخدم هذه الأحرف كفواصل بين الحقول. بينما لا تقدم ترميزات أخرى، مثل ISO-2022 و Shift-JIS، مثل هذه الضمانات، مما يجعل المطابقة على رموز البايت غير آمنة. لم تكن هذه الترميزات أيضًا "متزامنة ذاتيًا"، لذا فإن تحديد حدود الأحرف يتطلب الرجوع إلى بداية السلسلة، ويمكن أن يؤدي لصق سلسلتين معًا إلى تلف السلسلة الثانية.

لقد بسّطت يونيكود الصورة إلى حد ما. فمعظم لغات البرمجة الآن تحتوي على نوع بيانات لسلاسل يونيكود. صُمم تنسيق دفق البايتات المفضل لدى يونيكود، UTF-8، لتجنب المشاكل المذكورة أعلاه في ترميزات البايتات المتعددة القديمة. تتطلب ترميزات UTF-8 وUTF-16 و UTF-32 من المبرمج معرفة أن وحدات الترميز ذات الحجم الثابت تختلف عن "الأحرف"، وتكمن الصعوبة الرئيسية حاليًا في واجهات برمجة التطبيقات المصممة بشكل خاطئ والتي تحاول إخفاء هذا الاختلاف (مع أن UTF-32 يجعل نقاط الترميز ذات حجم ثابت، إلا أنها ليست "أحرفًا" نظرًا لتركيبها للرموز).

التطبيقات

تسمح بعض لغات البرمجة، مثل C++ و Perl و Ruby ، عادةً بتغيير محتوى السلسلة النصية بعد إنشائها؛ وتُسمى هذه السلاسل النصية القابلة للتغيير . أما في لغات أخرى، مثل Java و JavaScript و Lua و Python و Go ، فتكون القيمة ثابتة، ويجب إنشاء سلسلة نصية جديدة لإجراء أي تعديل؛ وتُسمى هذه السلاسل النصية غير القابلة للتغيير . توفر بعض هذه اللغات التي تدعم السلاسل النصية غير القابلة للتغيير نوعًا آخر قابلًا للتغيير، مثل Java و .NET ، و StringBuilderJava الآمنة للاستخدام المتزامن StringBuffer، و CocoaNSMutableString . يُصاحب عدم قابلية التغيير مزايا وعيوب: فبينما قد تتطلب السلاسل النصية غير القابلة للتغيير إنشاء نسخ متعددة، إلا أنها أبسط وأكثر أمانًا للاستخدام المتزامن .

تُنفَّذ السلاسل النصية عادةً على شكل مصفوفات من البايتات أو الأحرف أو وحدات الترميز، مما يسمح بالوصول السريع إلى الوحدات الفردية أو السلاسل الفرعية، بما في ذلك الأحرف عندما يكون لها طول ثابت. في المقابل ، تُنفِّذ بعض اللغات، مثل هاسكل، السلاسل النصية على شكل قوائم مرتبطة .

توفر العديد من اللغات عالية المستوى السلاسل كنوع بيانات أساسي، مثل JavaScript و PHP ، بينما توفرها معظم اللغات الأخرى كنوع بيانات مركب، وبعضها يدعم كتابة القيم الحرفية بشكل خاص، على سبيل المثال، Java و C# .

تتجنب بعض لغات البرمجة، مثل C و Prolog و Erlang ، تخصيص نوع بيانات للسلاسل النصية، وتعتمد بدلاً من ذلك على تمثيل السلاسل النصية كقوائم من رموز الأحرف. حتى في لغات البرمجة التي تحتوي على نوع بيانات مخصص للسلاسل النصية، يمكن عادةً التعامل مع السلاسل النصية كسلسلة من رموز الأحرف، مثل قوائم الأعداد الصحيحة أو غيرها من القيم.

التمثيلات

تعتمد تمثيلات السلاسل النصية بشكل كبير على اختيار مجموعة الأحرف وطريقة ترميزها. صُممت تطبيقات السلاسل النصية القديمة للعمل مع مجموعة الأحرف والترميز المُحددين بواسطة ASCII، أو امتدادات أحدث مثل سلسلة ISO 8859. أما التطبيقات الحديثة، فتستخدم غالبًا مجموعة الأحرف الواسعة المُحددة بواسطة Unicode إلى جانب مجموعة متنوعة من الترميزات المعقدة مثل UTF-8 وUTF-16.

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

تتشابه معظم تطبيقات السلاسل النصية إلى حد كبير مع المصفوفات ذات الطول المتغير ، حيث تخزن عناصرها رموز الأحرف المقابلة. ويكمن الاختلاف الرئيسي في أنه مع بعض الترميزات، قد يشغل حرف منطقي واحد أكثر من عنصر واحد في المصفوفة. يحدث هذا، على سبيل المثال، مع ترميز UTF-8، حيث يمكن أن تشغل الرموز المفردة ( نقاط ترميز UCS ) من بايت واحد إلى أربعة بايتات، ويمكن أن يشغل الحرف الواحد عددًا غير محدد من الرموز. في هذه الحالات، يختلف الطول المنطقي للسلسلة (عدد الأحرف) عن الطول الفعلي للمصفوفة (عدد البايتات المستخدمة). يتجنب ترميز UTF-32 الجزء الأول من هذه المشكلة.

متجهات رائعة

يمكن تخزين طول السلسلة في متجه بيانات ، منفصل عن مساحة تخزين الأحرف الفعلية. استخدم مُصرّف IBM PL/I (F) متجه بيانات السلسلة [ 11 ] (SDV) للسلاسل ذات الأطوال المتغيرة ولمرور معلمات السلسلة. يحتوي متجه بيانات السلسلة على الطول الحالي والطول الأقصى، وهو غير مُجاور للسلسلة نفسها. بعد إصدار PL/I (F)، تخلّت IBM عن متجه بيانات السلسلة لصالح السلاسل التي تبدأ بطولها.

غير منتهي

يمكن تخزين طول السلسلة ضمنيًا باستخدام حرف إنهاء خاص؛ غالبًا ما يكون هذا الحرف هو الحرف الفارغ (NUL)، الذي تكون جميع بتاته أصفارًا، وهو اصطلاح مُستخدم ومُعتمد في لغة البرمجة C الشهيرة . [ 12 ] ولذلك، يُشار إلى هذا التمثيل عادةً باسم سلسلة C. يشغل هذا التمثيل لسلسلة مكونة من n حرفًا مساحة n + 1 (1 لحرف الإنهاء)، وبالتالي فهو بنية بيانات ضمنية .

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

مثال على سلسلة نصية منتهية بـ null مخزنة في مخزن مؤقت بحجم 10 بايت ، بالإضافة إلى تمثيلها ASCII (أو UTF-8 الأكثر حداثة) كأرقام سداسية عشرية مكونة من 8 بتات هو:

FRANKنولkefw
46 1652 1641 164E 161600 161665 1666 1677 16

يبلغ طول السلسلة في المثال أعلاه، " FRANK"، خمسة أحرف، لكنها تشغل ستة بايتات. لا تُشكّل الأحرف التي تلي حرف الإنهاء جزءًا من التمثيل؛ فقد تكون جزءًا من بيانات أخرى أو مجرد بيانات عشوائية. (تُسمى السلاسل من هذا النوع أحيانًا سلاسل ASCIZ ، نسبةً إلى توجيه لغة التجميع الأصلي المستخدم لتعريفها).

منتهية بالبايت والبت

لقد ظهر استخدام بايت خاص غير البايت الفارغ لإنهاء السلاسل تاريخيًا في كل من الأجهزة [ a ] والبرامج، وإن كان أحيانًا بقيمة كانت أيضًا حرف طباعة. $تم استخدام البايت الخاص [a] بواسطة العديد من أنظمة التجميع، :وتم استخدامه بواسطة أنظمة CDC (كان لهذا الحرف قيمة صفر)، واستخدم جهاز ZX80 البايت الخاص "[ 15 ] لأنه كان فاصل السلسلة في لغة BASIC الخاصة به.

على نحو مشابه، استخدمت أجهزة "معالجة البيانات" مثل IBM 1401 بتًا خاصًا لتمييز الكلمات، وذلك لتحديد بداية السلاسل النصية من اليسار، حيث تبدأ العملية من اليمين. وكان يجب أن يكون هذا البت فارغًا في جميع أجزاء السلسلة النصية الأخرى. هذا يعني أنه على الرغم من أن IBM 1401 كان يحتوي على كلمة مكونة من سبعة بتات، إلا أنه لم يفكر أحد تقريبًا في استخدام هذه الميزة، وتجاوز تخصيص البت السابع (على سبيل المثال) لمعالجة رموز ASCII.

اعتمدت برامج الحواسيب الصغيرة المبكرة على حقيقة أن رموز ASCII لا تستخدم البت الأعلى، وتضبطه للإشارة إلى نهاية السلسلة. يجب إعادة ضبطه إلى 0 قبل الإخراج. [ 16 ]

الطول المحدد

يمكن أيضًا تخزين طول السلسلة بشكل صريح، على سبيل المثال عن طريق إضافة طول السلسلة كقيمة بايت. يُستخدم هذا الأسلوب في العديد من لهجات باسكال ؛ ونتيجة لذلك، يُطلق البعض على هذه السلسلة اسم سلسلة باسكال أو سلسلة P. يحد تخزين طول السلسلة كبايت من الحد الأقصى لطول السلسلة إلى 255. لتجنب هذه القيود، تستخدم التطبيقات المحسّنة لسلاسل P كلمات 16 أو 32 أو 64 بت لتخزين طول السلسلة. عندما يغطي حقل الطول مساحة العنوان ، فإن السلاسل محدودة فقط بالذاكرة المتاحة .

إذا كان طول السلسلة محدودًا، فيمكن ترميزها في مساحة ثابتة، عادةً ما تكون كلمة واحدة، مما يؤدي إلى بنية بيانات ضمنية تشغل مساحة n + k ، حيث k هو عدد الأحرف في الكلمة (8 لترميز ASCII ذي 8 بت على جهاز 64 بت، و1 لترميز UTF-32/UCS-4 ذي 32 بت على جهاز 32 بت، وهكذا). أما إذا كان طول السلسلة غير محدود، فإن ترميز سلسلة بطول n يشغل مساحة log( n ) (انظر الترميز ذي الطول الثابت )، لذا فإن السلاسل التي تبدأ ببادئة طولية تُعد بنية بيانات مختصرة ، حيث تُرمّز سلسلة بطول n في مساحة log( n ) + n .

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

فيما يلي سلسلة باسكال مخزنة في مخزن مؤقت بحجم 10 بايت، بالإضافة إلى تمثيلها ASCII / UTF-8:

طولFRANKkefw
05 1646 1652 1641 164E 16161665 1666 1677 16

السلاسل كسجلات

تُنفذ العديد من اللغات، بما في ذلك اللغات الموجهة للكائنات، السلاسل النصية كسجلات ذات بنية داخلية مثل:

public final class String { private unsigned long length ; // طول السلسلة private UniquePointer < char [] > text ; // ملكية صريحة // الدوال العامة... }

مع ذلك، ولأن التنفيذ عادةً ما يكون مخفيًا ، يجب الوصول إلى السلسلة وتعديلها عبر دوال الأعضاء. textهو مؤشر إلى منطقة ذاكرة مُخصصة ديناميكيًا، والتي قد يتم توسيعها حسب الحاجة. انظر أيضًا string (C++) .

تمثيلات أخرى

يحد كل من إنهاء الأحرف ورموز الطول من السلاسل النصية: على سبيل المثال، لا يمكن التعامل مع مصفوفات الأحرف C التي تحتوي على أحرف فارغة (NUL) بشكل مباشر بواسطة وظائف مكتبة السلاسل النصية C : تقتصر السلاسل النصية التي تستخدم رمز طول على القيمة القصوى لرمز الطول.

يمكن التغلب على هذين القيدين من خلال البرمجة الذكية.

من الممكن إنشاء هياكل بيانات ووظائف تعالجها دون مشاكل إنهاء الأحرف، ويمكنها من حيث المبدأ تجاوز قيود ترميز الطول. كما يمكن تحسين السلسلة المُمثلة باستخدام تقنيات من ترميز طول التشغيل (استبدال الأحرف المتكررة بقيمة الحرف وطوله) وترميز هامينغ .

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

تُعدّ بنية البيانات الأساسية في محرر النصوص هي تلك التي تُدير السلسلة (تسلسل الأحرف) التي تُمثّل الحالة الحالية للملف قيد التحرير. وبينما يُمكن تخزين هذه الحالة في مصفوفة طويلة متتالية من الأحرف، يستخدم محرر النصوص النموذجي تمثيلاً بديلاً كبنية بيانات تسلسلية - مثل مخزن الفجوات ، أو قائمة مرتبطة من الأسطر، أو جدول الأجزاء ، أو سلسلة الأحرف - مما يجعل بعض عمليات السلسلة، مثل الإضافة والحذف والتراجع عن التعديلات السابقة، أكثر كفاءة. [ 17 ]

مخاوف أمنية

قد يؤثر اختلاف تخطيط الذاكرة ومتطلبات التخزين للسلاسل النصية على أمان البرنامج الذي يصل إلى بيانات السلسلة. فعادةً ما تكون تمثيلات السلاسل النصية التي تتطلب حرف إنهاء عرضةً لمشاكل تجاوز سعة المخزن المؤقت إذا لم يكن حرف الإنهاء موجودًا، سواءً كان ذلك بسبب خطأ برمجي أو قيام مهاجم بتغيير البيانات عمدًا. كما أن تمثيلات السلاسل النصية التي تعتمد حقل طول منفصل تكون عرضةً للمشاكل أيضًا إذا أمكن التلاعب بالطول. في مثل هذه الحالات، يتطلب رمز البرنامج الذي يصل إلى بيانات السلسلة النصية فحصًا للحدود لضمان عدم وصوله عن غير قصد إلى بيانات خارج حدود ذاكرة السلسلة أو تغييرها.

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

سلاسل حرفية

أحيانًا، يتطلب الأمر تضمين سلاسل نصية داخل ملف نصي قابل للقراءة البشرية ومُعدّ للاستخدام الآلي. هذا ضروري، على سبيل المثال، في شفرة المصدر للغات البرمجة، أو في ملفات الإعدادات. في هذه الحالة، لا يُعدّ حرف NUL مناسبًا كفاصل للسلسلة، لأنه غير مرئي عادةً (غير قابل للطباعة) ويصعب إدخاله عبر لوحة المفاتيح. كما أن تخزين طول السلسلة سيكون غير عملي، إذ أن حساب الطول وتتبعه يدويًا أمر شاق وعرضة للأخطاء.

من بين التمثيلات الشائعة ما يلي:

سلاسل غير نصية

على الرغم من شيوع استخدام السلاسل النصية، إلا أن مصطلح "سلسلة نصية" في علوم الحاسوب قد يشير بشكل عام إلى أي تسلسل من البيانات المتجانسة. فعلى سبيل المثال، يمكن استخدام سلسلة بتات أو سلسلة بايتات لتمثيل البيانات الثنائية غير النصية المسترجعة من وسيط اتصال. وقد تُمثَّل هذه البيانات بنوع بيانات خاص بالسلاسل النصية أو لا، وذلك حسب احتياجات التطبيق، ورغبة المبرمج، وإمكانيات لغة البرمجة المستخدمة. وإذا لم يكن تنفيذ السلاسل النصية في لغة البرمجة متوافقًا مع معيار 8 بت ، فقد يحدث تلف في البيانات.

يُفرّق مبرمجو لغة C بوضوح بين "السلسلة النصية"، أو "سلسلة الأحرف"، التي تنتهي دائمًا بحرف فارغ، و"مصفوفة الأحرف"، التي قد تُخزّن في نفس المصفوفة ولكنها غالبًا لا تنتهي بحرف فارغ. يبدو استخدام دوال معالجة السلاسل النصية في لغة C على مصفوفة الأحرف هذه ناجحًا في كثير من الأحيان، ولكنه يؤدي لاحقًا إلى مشاكل أمنية . [ 18 ] [ 19 ] [ 20 ]

خوارزميات معالجة السلاسل النصية

توجد العديد من الخوارزميات لمعالجة النصوص، ولكل منها مزاياها وعيوبها. ويمكن تحليل الخوارزميات المتنافسة من حيث وقت التشغيل، ومتطلبات التخزين، وما إلى ذلك. وقد صاغ عالم الحاسوب تسفي غاليل مصطلح "علم السلاسل النصية " عام ١٩٨٤ لوصف نظرية الخوارزميات وهياكل البيانات المستخدمة في معالجة النصوص. [ ٢١ ] [ ٢٢ ] [ ٢٣ ]

تتضمن بعض فئات الخوارزميات ما يلي:

تستخدم خوارزميات السلاسل المتقدمة في كثير من الأحيان آليات وهياكل بيانات معقدة، من بينها أشجار اللواحق وآلات الحالة المحدودة .

لغات وأدوات موجهة نحو سلاسل الأحرف

تُعدّ السلاسل النصية نوعًا مفيدًا جدًا من البيانات، لدرجة أنه تم تصميم العديد من لغات البرمجة لتسهيل كتابة تطبيقات معالجة السلاسل النصية. ومن الأمثلة على ذلك اللغات التالية:

تُتيح العديد من أدوات يونكس إجراء عمليات بسيطة على النصوص، ويمكن استخدامها لبرمجة بعض خوارزميات معالجة النصوص القوية بسهولة. ويمكن اعتبار الملفات والتدفقات المحدودة بمثابة نصوص.

تستخدم بعض واجهات برمجة التطبيقات مثل واجهة التحكم بالوسائط المتعددة ، أو SQL المضمن ، أو printf، سلاسل نصية لحفظ الأوامر التي سيتم تفسيرها.

تستخدم العديد من لغات البرمجة النصية ، بما في ذلك بيرل وبايثون وروبي وتي سي إل، التعابير النمطية لتسهيل عمليات النصوص. وتُعرف بيرل تحديدًا باستخدامها للتعابير النمطية، [ 24 ] كما أن العديد من اللغات والتطبيقات الأخرى تُطبّق تعابير نمطية متوافقة مع بيرل .

تدعم بعض اللغات مثل بيرل وروبي عملية استيفاء السلاسل النصية ، مما يسمح بتقييم التعبيرات العشوائية وإدراجها في السلاسل النصية الحرفية.

دوال سلسلة الأحرف

تُستخدم دوال السلاسل النصية لإنشاء سلاسل نصية أو تغيير محتويات سلسلة نصية قابلة للتعديل. كما تُستخدم أيضًا للاستعلام عن معلومات حول سلسلة نصية. وتختلف مجموعة الدوال وأسماؤها باختلاف لغة البرمجة .

أبسط مثال على دوال السلاسل النصية هو دالة طول السلسلة ، وهي الدالة التي تُعيد طول السلسلة (دون احتساب أحرف الإنهاء أو أي معلومات هيكلية داخلية أخرى) ولا تُجري أي تعديلات عليها. غالبًا ما تُسمى هذه الدالة `string` أو `string` أو ` string` . على سبيل المثال، length` string` تُعيد 11. ومن الدوال الشائعة الأخرى دالة دمج السلاسل النصية ، حيث تُنشأ سلسلة نصية جديدة بدمج سلسلتين نصيتين، وغالبًا ما يكون ذلك باستخدام عامل الجمع `+`.lensizelength("hello world")

تحتوي بعض بنى مجموعات تعليمات المعالجات الدقيقة على دعم مباشر لعمليات السلاسل النصية، مثل نسخ الكتل (على سبيل المثال في معالجات Intel x86m ). [ 25 ]REPNZ MOVSB

النظرية الرسمية

يتركΣ{\displaystyle \Sigma }ليكن مجموعة منتهية من الرموز المتميزة وغير المبهمة (وتسمى أيضًا الأحرف)، وتسمى الأبجدية . سلسلة ( أو كلمة [ 26 ] أو تعبير [ 27 ] ) علىΣ{\displaystyle \Sigma }أي سلسلة محدودة من الرموز منΣ{\displaystyle \Sigma }[ 28 ] على سبيل المثال ، إذاΣ={0،1}{\displaystyle \Sigma =\{{\texttt {0}},{\texttt {1}}\}}، ثم01011{\displaystyle {\texttt {01011}}}هو سلسلة فوقΣ{\displaystyle \Sigma }.

طول الخيطs{\displaystyle s}عدد الرموز فيs{\displaystyle s}(طول المتتالية) ويمكن أن يكون أي عدد صحيح غير سالب ؛ وغالبًا ما يُرمز إليه بـ|s|{\displaystyle |s|}السلسلة الفارغة هي السلسلة الفريدة علىΣ{\displaystyle \Sigma }من الطول0{\displaystyle 0}، ويُشار إليه بـε{\displaystyle \varepsilon }أوλ{\displaystyle \lambda }[ 28 ] [ 29 ]

مجموعة جميع السلاسل فوقΣ{\displaystyle \Sigma }من الطولن{\displaystyle n}يُشار إليه بـΣن{\displaystyle \Sigma ^{n}}على سبيل المثال، إذاΣ={0،1}{\displaystyle \Sigma =\{{\texttt {0}},{\texttt {1}}\}}، ثمΣ2={٠٠،01،10،11}{\displaystyle \Sigma ^{2}=\{{\texttt {00}},{\texttt {01}},{\texttt {10}},{\texttt {11}}\}}لديناΣ0={ε}{\displaystyle \Sigma ^{0}=\{\varepsilon \}}لكل حرف أبجديΣ{\displaystyle \Sigma }.

مجموعة جميع السلاسل فوقΣ{\displaystyle \Sigma }أي طول هو إغلاق كلين لـΣ{\displaystyle \Sigma }ويُشار إليه بـΣ*{\displaystyle \Sigma ^{*}}. من ناحيةΣن{\displaystyle \Sigma ^{n}}،

Σ*=ن=0Σن{\displaystyle \Sigma ^{*}=\bigcup _{n=0}^{\infty }\Sigma ^{n}}

على سبيل المثال، إذاΣ={0،1}{\displaystyle \Sigma =\{{\texttt {0}},{\texttt {1}}\}}، ثمΣ*={ε،0،1،٠٠،01،10،11،٠٠٠،001،010،011،...}{\displaystyle \Sigma ^{*}=\{\varepsilon ,{\texttt {0}},{\texttt {1}},{\texttt {00}},{\texttt {01}},{\texttt {10}},{\texttt {11}},{\texttt {000}},{\texttt {001}},{\texttt {010}},{\texttt {011}},...\}}على الرغم من أن المجموعةΣ*{\displaystyle \Sigma ^{*}}هي نفسها لانهائية قابلة للعد ، كل عنصر من عناصرهاΣ*{\displaystyle \Sigma ^{*}}هي سلسلة ذات طول محدود.

مجموعة من الخيوط فوقΣ{\displaystyle \Sigma }(أي أي مجموعة فرعية منΣ*{\displaystyle \Sigma ^{*}}يُطلق عليها اسم لغة رسميةΣ{\displaystyle \Sigma }على سبيل المثال، إذاΣ={0،1}{\displaystyle \Sigma =\{{\texttt {0}},{\texttt {1}}\}}، مجموعة السلاسل النصية التي تحتوي على عدد زوجي من الأصفار،{ε،1،٠٠،11،001،010،100،111،0000،0011،0101،0110،1001،1010،1100،1111،...}{\displaystyle \{\varepsilon ,{\texttt {1}},{\texttt {00}},{\texttt {11}},{\texttt {001}},{\texttt {010}},{\texttt {100}},{\texttt {111}},{\texttt {0000}},{\texttt {0011}},{\texttt {0101}},{\texttt {0110}},{\texttt {1001}},{\texttt {1010}},{\texttt {1100}},{\texttt {1111}},...\}}، هي لغة رسميةΣ{\displaystyle \Sigma }.

دمج السلاسل الفرعية

عملية الربط هيعملية ثنائية مهمةΣ*{\displaystyle \Sigma ^{*}}لأي سلسلتينs{\displaystyle s}وت{\displaystyle t}فيΣ*{\displaystyle \Sigma ^{*}}، ويُعرَّف تسلسلها بأنه سلسلة الرموز فيs{\displaystyle s}متبوعًا بتسلسل الأحرف فيت{\displaystyle t}، ويُشار إليه بـsت{\displaystyle st}على سبيل المثال، إذاΣ={أ،ب،...،z}{\displaystyle \Sigma =\{{\texttt {a}},{\texttt {b}},...,{\texttt {z}}\}}(أي الأبجدية الإنجليزية الصغيرة )،s=دُبٌّ{\displaystyle s={\texttt {bear}}}، وت=حضن{\displaystyle t={\texttt {hug}}}، ثمsت=عناق الدب{\displaystyle st={\texttt {bearhug}}}وتs=دب هاغبي{\displaystyle ts={\texttt {hugbear}}}.

عملية دمج السلاسل النصية هي عملية تجميعية ، ولكنها غير تبديلية . السلسلة النصية الفارغةε{\displaystyle \varepsilon }يُستخدم كعنصر هوية ؛ لأي سلسلة نصيةs{\displaystyle s}،εs=sε=s{\displaystyle \varepsilon s=s\varepsilon =s}لذلك، فإن المجموعةΣ*{\displaystyle \Sigma ^{*}}وتُشكّل عملية الربط أحاديًا ، وهو الأحادي الحر الناتج عنΣ{\displaystyle \Sigma }بالإضافة إلى ذلك، تُعرّف دالة الطول تشاكلًا أحاديًا منΣ*{\displaystyle \Sigma ^{*}}إلى الأعداد الصحيحة غير السالبة (أي دالة)ل:Σ*شمال{0}{\displaystyle L:\Sigma ^{*}\mapsto \mathbb {N} \cup \{0\}}بحيثل(sت)=ل(s)+ل(ت)s،تΣ*{\displaystyle L(st)=L(s)+L(t)\quad \forall s,t\in \Sigma ^{*}}).

خيطs{\displaystyle s}يُقال إنها سلسلة فرعية أو عامل منت{\displaystyle t}إذا كانت هناك سلاسل نصية (ربما فارغة)u{\displaystyle u}وv{\displaystyle v}بحيثت=usv{\displaystyle t=usv}تحدد العلاقة "سلسلة فرعية من" ترتيبًا جزئيًا علىΣ*{\displaystyle \Sigma ^{*}}، وأصغر عنصر فيها هو السلسلة الفارغة.

البادئات واللواحق

خيطs{\displaystyle s}يقال إنها بادئة لـت{\displaystyle t}إذا كان هناك سلسلةu{\displaystyle u}بحيثت=su{\displaystyle t=su}. لوu{\displaystyle u}غير فارغ،s{\displaystyle s}ويُقال إنها بادئة مناسبة لـت{\displaystyle t}بشكل متناظر، خيطs{\displaystyle s}يقال إنها لاحقة منت{\displaystyle t}إذا كان هناك سلسلةu{\displaystyle u}بحيثت=us{\displaystyle t=us}. لوu{\displaystyle u}غير فارغ،s{\displaystyle s}ويُقال إنها لاحقة مناسبة لـت{\displaystyle t}اللواحق والبوادئ هي سلاسل فرعية منت{\displaystyle t}. كلا العلاقتين "هو بادئة لـ" و "هو لاحقة لـ" هما ترتيبات بادئة .

انعكاس

معكوس السلسلة هو سلسلة تحتوي على نفس الرموز ولكن بترتيب عكسي. على سبيل المثال، إذاs=أبجد{\displaystyle s={\texttt {abc}}}(أينأ{\displaystyle {\texttt {a}}}،ب{\displaystyle {\texttt {b}}}، وج{\displaystyle {\texttt {c}}}(هي رموز الأبجدية)، ثم عكسهاs{\displaystyle s}يكونسي بي إيه{\displaystyle {\texttt {cba}}}سلسلة معكوسة (مثلاً،s=سيدتي{\displaystyle s={\texttt {madam}}}يُطلق على هذا الاسم اسم المتناظر ، والذي يشمل أيضًا السلسلة الفارغة وجميع السلاسل ذات الطول1{\displaystyle 1}.

التناوب

خيطs=uv{\displaystyle s=uv}يقال إنها دورة منت{\displaystyle t}لوت=vu{\displaystyle t=vu}على سبيل المثال، إذاΣ={0،1}{\displaystyle \Sigma =\{{\texttt {0}},{\texttt {1}}\}}السلسلة0011001{\displaystyle {\texttt {0011001}}}هو دوران0100110{\displaystyle {\texttt {0100110}}}، أينu=00110{\displaystyle u={\texttt {00110}}}وv=01{\displaystyle v={\texttt {01}}}كمثال آخر، السلسلةأبجد{\displaystyle {\texttt {abc}}}له ثلاث دورات مختلفة، وهي:أبجد{\displaystyle {\texttt {abc}}}نفسه (معu=أبجد{\displaystyle u={\texttt {abc}}}،v=ε{\displaystyle v=\varepsilon })bca{\displaystyle {\texttt {bca}}}(معu=قبل الميلاد،v=أ{\displaystyle u={\texttt {bc}},v={\texttt {a}}})، وسيارة أجرة{\displaystyle {\texttt {cab}}}(معu=ج،v=أب{\displaystyle u={\texttt {c}},v={\texttt {ab}}}).

الترتيب المعجمي

من المفيد غالبًا تحديد ترتيب لمجموعة من السلاسل النصية. إذا كانت الأبجديةΣ{\displaystyle \Sigma }له ترتيب كلي (انظر الترتيب الأبجدي )، ويمكن تعريف ترتيب كلي علىΣ*{\displaystyle \Sigma ^{*}}يُطلق عليه الترتيب المعجمي . يكون الترتيب المعجمي تامًا إذا كان الترتيب الأبجدي تامًا، ولكنه لا يكون ذا أساس متين لأي أبجدية غير بديهية، حتى لو كان الترتيب الأبجدي تامًا. على سبيل المثال، إذاΣ={0،1}{\displaystyle \Sigma =\{{\texttt {0}},{\texttt {1}}\}}و0<1{\displaystyle {\texttt {0}}<{\texttt {1}}}ثم الترتيب المعجمي علىΣ*{\displaystyle \Sigma ^{*}}يشمل ذلك العلاقاتε<0<٠٠<٠٠٠<...<٠٠٠١<...<001<...<01<010<...<011<0110<...<01111<...<1<10<100<...<101<...<111<...<1111<...<11111...{\displaystyle \varepsilon <{\texttt {0}}<{\texttt {00}}<{\texttt {000}}<...<{\texttt {0001}}<...<{\texttt {001}}<...<{\texttt {01}}<{\texttt {010}}<...<{\texttt {011}}<{\texttt {0110}}<...<{\texttt {01111}}<...<{\texttt {1}}<{\texttt {10}}<{\texttt {100}}<...<{\texttt {101}}<...<{\texttt {111}}<...<{\texttt {1111}}<...<{\texttt {11111}}...}فيما يتعلق بهذا الترتيب، على سبيل المثال المجموعة اللانهائية{1،01،001،٠٠٠١،00001،000001،...}{\displaystyle \{{\texttt {1}},{\texttt {01}},{\texttt {001}},{\texttt {0001}},{\texttt {00001}},{\texttt {000001}},...\}}لا يحتوي على عنصر أدنى.

راجع Shortlex للاطلاع على ترتيب بديل للسلاسل النصية يحافظ على سلامة الأساس. بالنسبة للأبجدية المذكورة في المثال، يكون ترتيب Shortlex كالتالي:ε<0<1<٠٠<01<10<11<٠٠٠<001<010<011<100<101<0110<111<0000<٠٠٠١<٠٠١٠<0011<...<1111<00000<00001...{\displaystyle \varepsilon <{\texttt {0}}<{\texttt {1}}<{\texttt {00}}<{\texttt {01}}<{\texttt {10}}<{\texttt {11}}<{\texttt {000}}<{\texttt {001}}<{\texttt {010}}<{\texttt {011}}<{\texttt {100}}<{\texttt {101}}<{\texttt {0110}}<{\texttt {111}}<{\texttt {0000}}<{\texttt {0001}}<{\texttt {0010}}<{\texttt {0011}}<...<{\texttt {1111}}<{\texttt {00000}}<{\texttt {00001}}...}

عمليات السلاسل النصية

توجد عدة عمليات إضافية على السلاسل النصية شائعة في النظرية الرسمية. وقد وردت هذه العمليات في مقالة عمليات السلاسل النصية .

الطوبولوجيا

مكعب (فائق) من سلاسل ثنائية بطول3{\displaystyle 3}

يمكن تفسير السلاسل النصية على النحو التالي كعقد على الرسم البياني، حيثك{\displaystyle k}عدد الرموز فيΣ{\displaystyle \Sigma }:

الطوبولوجيا الطبيعية لمجموعة السلاسل ذات الطول الثابت أو المتغير هي الطوبولوجيا المنفصلة، ​​بينما الطوبولوجيا الطبيعية لمجموعة السلاسل اللانهائية هي طوبولوجيا النهاية ، حيث تُعتبر مجموعة السلاسل اللانهائية النهاية العكسية لمجموعات السلاسل المنتهية. هذا هو البناء المستخدم للأعداد p -adic وبعض بنى مجموعة كانتور ، وينتج عنه نفس الطوبولوجيا.

يمكن إيجاد التماثلات بين تمثيلات السلاسل للطوبولوجيا عن طريق التطبيع وفقًا لدوران السلسلة الأدنى معجميًا .

انظر أيضاً

ملاحظات توضيحية

  1. على سبيل المثال،تعليمات نقل العناصر RCA 501 (IT) [ 13 ] رمز فاصل العناصر (ISS)، وتستخدم تعليمات تحديد موقع الرمز RCA 301 (LSL، LSR)، ونقل البيانات بواسطة الرمز (DSL، DSR) ونقل الرمز للتعبئة (SF) [ 14 ] حرفًا في التعليمات.

مراجع

  1. "مقدمة إلى جافا - MFC 158 G" . مؤرشف من الأصل بتاريخ 2016-03-03. تُسمى السلاسل النصية (أو الثوابت) "سلاسل نصية مجهولة".
  2. دي سانت جيرمان، إتش. جيمس. "الأوتار" . جامعة يوتا، كلية كاليرت للحوسبة .
  3. فرانسيس، ديفيد م.؛ ميرك، هيذر ل. (14 نوفمبر 2019). "الحمض النووي ككيان بيوكيميائي وسلسلة بيانات" .
  4. 1 2 3 بورشيفيلد، آر دبليو (1986). "سلسلة". ملحق لقاموس أكسفورد الإنجليزي . أكسفورد في مطبعة كلارندون.
  5. "سلسلة". قاموس أكسفورد الإنجليزي . المجلد العاشر. أكسفورد في مطبعة كلارندون. 1933. 
  6. "سلسلة (اسم)" . قاموس أصل الكلمات على الإنترنت .
  7. ويتني، ويليام دوايت ؛ سميث، بنجامين إي. "سلسلة". قاموس القرن . نيويورك: شركة القرن. ص 5994. 
  8. "زوال الاتحاد القديم". ميلووكي سنتينل . 11 يناير 1898. ص 3. 
  9. لويس، سي آي (1918). مسح للمنطق الرمزي . بيركلي: مطبعة جامعة كاليفورنيا. ص 355. 
  10. ساميت، جان إي. (يوليو 1972). "لغات البرمجة: التاريخ والمستقبل" (ملف PDF) . مجلة اتصالات رابطة مكائن ​​الحوسبة . 15 (7). doi : 10.1145/361454.361485 . S2CID 2003242 . 
  11. "بيانات السلاسل النصية" (ملف PDF) . نظام التشغيل IBM System/360 - PL/I (F) - دليل المبرمج - رقم البرنامج 360S-NL-5ll (ملف PDF) . مكتبة مراجع الأنظمة ( الطبعة الخامسة). نوفمبر 1968. صفحة 136. C28-6594-4 . تاريخ الاسترجاع: 2 سبتمبر 2025. تحتوي البيانات ذات الأطوال المتغيرة على مناطق تحكم مرتبطة بها تُعرف باسم "متجهات الوصف" التي تصف السلاسل النصية . يحتوي متجه الوصف على سجل لأقصى طول وطول السلسلة النصية الحالي، بالإضافة إلى مؤشر إلى بداية السلسلة. لا يشترط أن تكون متجهات الوصف مجاورة للبيانات التي تصفها، ولكنها عادةً ما تشغل مساحة تخزين من نفس فئة التخزين.  
  12. براينت، راندال إي .؛ ديفيد، أوهالارون (2003)، أنظمة الحاسوب: منظور المبرمج ( طبعة 2003)، أبر سادل ريفر، نيوجيرسي: بيرسون إديوكيشن، ص 40، ISBN   0-13-034074-Xتمت أرشفة هذا النص من النسخة الأصلية بتاريخ 2007-08-06
  13. "تعليمات RCA 501" (ملف PDF) . نظام معالجة البيانات الإلكترونية RCA 501 - دليل مرجعي للمبرمجين (ملف PDF) . شركة راديو أمريكا . 1958. ص 35. P501-2 . تاريخ الاسترجاع: 18 نوفمبر 2025 . 
  14. "تعليمات RCA 301 - مقدمة" (ملف PDF) . نظام معالجة البيانات الإلكترونية RCA 301 - دليل مرجعي للمبرمجين (ملف PDF) . شركة راديو أمريكا . يناير 1962. الصفحات 33-44 . 93-17-000 . تاريخ الاسترجاع: 18 نوفمبر 2025 . 
  15. ويرماوث، جيف. "قائمة تجميعية لذاكرة القراءة فقط لجهاز سينكلير ZX80" . مؤرشف من الأصل في 15 أغسطس 2015.
  16. أليسون، دينيس. "ملاحظات تصميمية لـ Tiny BASIC" . مؤرشف من الأصل بتاريخ 2017-04-10.
  17. تشارلز كراولي. "هياكل البيانات لتسلسلات النصوص" مؤرشف بتاريخ 4 مارس 2016 في أرشيف الإنترنت . قسم "المقدمة" مؤرشف بتاريخ 4 أبريل 2016 في أرشيف الإنترنت .
  18. "strlcpy و strlcat - نسخ ودمج السلاسل النصية بشكل متسق وآمن." مؤرشف بتاريخ 13 مارس 2016 في Wayback Machine
  19. "مقالٌ ساخرٌ حول strcpy وstrncpy وstrlcpy." مؤرشف بتاريخ 29 فبراير 2016 في أرشيف الإنترنت (Wayback Machine).
  20. كيث طومسون. "لا، دالة strncpy() ليست نسخة "أكثر أمانًا" من دالة strcpy()". 2012.
  21. "نادي براغ لعلم الأوتار" . stringology.org . مؤرشف من الأصل في 1 يونيو 2015. تم الاطلاع عليه في 23 مايو 2015 .
  22. إيفارتس، هولي (18 مارس 2021). "العميد السابق تسفي جليل يُصنَّف ضمن أفضل 10 علماء حاسوب مؤثرين في العقد الماضي" . كلية الهندسة بجامعة كولومبيا . وقد ابتكر مصطلح "علم السلاسل"، وهو فرع من فروع خوارزميات السلاسل.
  23. كروشيمور، ماكسيم (2002). جواهر علم الأوتار . سنغافورة. ص. 5. ISBN  981-02-4782-6يُعد مصطلح "علم السلاسل" لقبًا شائعًا لخوارزميات السلاسل وكذلك لخوارزميات النصوص .{{cite book}}: CS1 maint: موقع الناشر مفقود ( رابط )
  24. "أساسيات لغة بيرل" . مؤرشف من الأصل بتاريخ 21-04-2012. تكمن أبرز نقاط قوة لغة بيرل في معالجة السلاسل النصية باستخدام التعابير النمطية.
  25. "تعليمات السلاسل x86" . مؤرشف من الأصل بتاريخ 27-03-2015.
  26. فليتشر، بيتر؛ هويل، هيوز؛ باتي، سي. واين (1991). أسس الرياضيات المتقطعة . PWS-Kent. ص 114. ISBN  0-53492-373-9ليكن Σ أبجدية. الكلمة غير الفارغة على Σ هي متتالية منتهية مجالها I n (لبعض n ∈ ℕ) ومجالها المقابل Σ.
  27. شوينفيلد، جوزيف ر. (2010) [1967]. المنطق الرياضي (طبعة مُعاد طباعتها ). مطبعة سي آر سي. ص 2. ISBN   978-156881135-2. أي تسلسل محدود من رموز لغة ما يسمى تعبيرًا عن تلك اللغة.
  28. 1 2 باربرا هـ. بارتي؛ أليس تير مولين ؛ روبرت إي. وول (1990). الأساليب الرياضية في اللغويات . كلوير.
  29. جون إي. هوبكروفت، جيفري د. أولمان (1979). مقدمة في نظرية الأوتوماتا واللغات والحوسبة . أديسون-ويسلي. ISBN 0-201-02988-X.هنا: القسم 1.1، الصفحة 1