سلسلة حرفية

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

بناء الجملة

محدد بأقواس

يُفصل النص الحرفي بين قوسين بحرف بداية وحرف نهاية. ويمكن للغة تحديد استخدام أي أحرف كفواصل.

تُعدّ علامات الاقتباس الطريقة الأكثر شيوعًا لتحديد نص حرفي. تدعم العديد من لغات البرمجة علامات الاقتباس المزدوجة (مثل `<div>` "Hello") و/أو علامات الاقتباس المفردة ( 'there'مثل `<div>`). عند دعم كلا النوعين، يمكن تقليل تضارب المحددات عن طريق التعامل مع أحد نمطي علامات الاقتباس كنص عادي عند وضعه داخل علامات اقتباس من النمط الآخر. في لغة بايثون، يكون النص الحرفي "Dwayne 'the rock' Johnson"صحيحًا لأن علامات الاقتباس الخارجية مزدوجة، مما يجعل علامات الاقتباس المفردة الداخلية نصًا عاديًا.

تُكتب السلسلة الفارغة على النحو التالي :"" أو ''.

المحددات المزدوجة هي نوعان مختلفان من الأحرف، يُستخدم أحدهما في بداية النص الحرفي والآخر في نهايته. باستخدام المحددات المزدوجة، تدعم اللغة تضمين علامات الاقتباس في النص الحرفي ، بشرط أن تكون جميعها مزدوجة ولا تتجاوز نطاقها. على سبيل المثال، يستخدم PostScript الأقواس، كما في (The quick (brown fox))` m4` ، ويستخدم علامة التنصيص المائلة` في البداية، والفاصلة العليا' في النهاية. يسمح Tcl باستخدام كل من علامات الاقتباس والأقواس المعقوفة، كما في ` "The quick brown fox"t` أو `t` {The quick {brown fox}}؛ وهذا مستمد من علامات الاقتباس المفردة في أنظمة Unix واستخدام الأقواس المعقوفة في لغة C للعبارات المركبة، لأن كتل التعليمات البرمجية في Tcl تُعتبر من الناحية النحوية مماثلة للنصوص الحرفية - لذا فإن كون المحددات مزدوجة أمر ضروري لجعل ذلك ممكنًا.

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

"أهلاً!" 'أهلاً!' "أهلاً!" "أهلاً!"

نطاق الخلط

يُقصد بمزج النطاقات دمج النطاقات معًا بدلاً من أن تكون هرمية بحتة . [ أ ]

بمعنى آخر، "خلط النطاق" هو ​​عندما لا يوجد محدد بداية غير غامض (أو محدد نهاية غير غامض).

من أمثلة الاقتباسات التي تخرج عن نطاقها (وهي سلاسل غير قانونية):

  • "InsideTheOuterString 'InnerString_ButWithUnmatchedEndingSingleQuoteThatRendersThisStringInvalid" ErroneousStringThatIsSomehowInsideTheInnerStringYetNotInsideTheOuterString'
  • "1 '2" 3'
  • "Inside1 'InsideBoth1and2" Inside2'

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

كما ذكرنا سابقاً، يمكن أن تكون علامات الاقتباس المتداخلة صالحة، كما هو الحال في "Dwayne 'the rock' Johnson"، ولكنها تتطلب طريقة ما تستخدم التسلسل الهرمي (عادةً ما تكون بنية بيانات مكدسة )، بغض النظر عما إذا كان هذا التسلسل الهرمي يستخدم أحرف فاصلة فريدة أو أحرف هروب أو فواصل أحرف متكررة .

"خلط النطاق" هو ​​حالة خاصة من تصادم المحددات، وسيتم شرحها لاحقًا في هذه الصفحة.

مسافات بيضاء محددة

قد تدعم لغة البرمجة سلاسل نصية متعددة الأسطر. في لغة YAML ، يمكن تحديد السلاسل النصية الحرفية من خلال الموضع النسبي للمسافات البيضاء والمسافة البادئة.

- العنوان : مثال على سلسلة نصية متعددة الأسطر في YAML | هذا نص متعدد الأسطر. قد تظهر هنا أحرف خاصة . يتم تحديد طول هذا النص عن طريق المسافة البادئة.

الكلمات مفصولة بفواصل

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

%map = ( red => 0x00f , blue => 0x0f0 , green => 0xf00 );

تتعامل لغة بيرل مع سلسلة الأحرف الأبجدية الرقمية غير المحجوزة كنص حرفي في معظم السياقات. على سبيل المثال، السطران التاليان في بيرل متكافئان:

$y = "x" ; $y = x ;

الترميز التصريحي

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

مثال 35 هان سلسلة هوليريث الحرفية

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

تصادم الفاصل

عند استخدام علامات الاقتباس، إذا رغب المستخدم في تمثيل الفاصل نفسه في سلسلة نصية حرفية، فإنه يواجه مشكلة تضارب الفواصل . على سبيل المثال، إذا كان الفاصل علامة اقتباس مزدوجة، فلا يمكن تمثيل علامة الاقتباس المزدوجة نفسها مباشرةً بالسلسلة النصية، """لأن علامة الاقتباس الثانية تُفسَّر على أنها نهاية السلسلة النصية الحرفية، وليس على أنها قيمتها. وبالمثل، لا يمكن كتابة "This is "in quotes", but invalid."لأن الجزء الأوسط المقتبس يُفسَّر على أنه خارج علامات الاقتباس. توجد حلول متنوعة، وأكثرها شيوعًا استخدام تسلسلات الهروب، مثل "\""أو "This is \"in quotes\" and properly escaped."، ولكن هناك حلول أخرى كثيرة.

تسمح علامات الاقتباس المزدوجة، مثل الأقواس في لغة Tcl، بالسلاسل المتداخلة، مثل، {foo {bar} zork}ولكنها لا تحل مشكلة تضارب المحددات، حيث لا يمكن ببساطة تضمين محدد إغلاق غير متوازن، كما في {}}.

مضاعفة

تتجنب العديد من اللغات، بما في ذلك باسكال ، وبيسيك ، ودي سي إل ، وسمول توك ، وإس كيو إل ، وجي ، وفورتران ، تعارض المحددات عن طريق مضاعفة علامات الاقتباس التي يُقصد بها أن تكون جزءًا من السلسلة النصية نفسها:

تحتوي سلسلة باسكال هذه على علامتي اقتباس مفردتين .
قلت: "هل تسمعني؟"

الاقتباس المزدوج

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

"هذه تفاحة جون." قلت: "هل تسمعني؟"

لكن هذا لا يسمح بوجود قيمة حرفية واحدة تحتوي على كلا المحددَين. ويمكن تجاوز هذه المشكلة باستخدام عدة قيم حرفية ودمج السلاسل النصية .

قلت: "هذه تفاحة جون . "

تحتوي لغة بايثون على خاصية دمج السلاسل النصية ، لذا يتم دمج السلاسل النصية المتتالية حتى بدون استخدام عامل، وبالتالي يمكن اختصار ذلك إلى:

قلت: "هذه تفاحة جون" .

علامات اقتباس فاصلة

قدمت لغة C++11 ما يسمى بالسلاسل النصية الخام . وهي تتكون أساسًا من

R" end-of-string-id ( content ) end-of-string-id "،

أي أنه بعد أن R"يتمكن المبرمج من إدخال ما يصل إلى 16 حرفًا باستثناء المسافات البيضاء والأقواس والشرطة المائلة العكسية، والتي تُشكل مُعرّف نهاية السلسلة (يُكرر للإشارة إلى نهاية السلسلة، ويُختصر إلى eos id )، يلزم إدخال قوس مفتوح (للدلالة على نهاية eos id). ثم يأتي المحتوى الفعلي للسلسلة: يمكن استخدام أي سلسلة من الأحرف (باستثناء أنه لا يجوز أن تحتوي على قوس مغلق متبوعًا بـ eos id متبوعًا بعلامة اقتباس)، وأخيرًا - لإنهاء السلسلة - يلزم قوس مغلق، و eos id، وعلامة اقتباس. أبسط حالة لمثل هذه السلسلة هي ذات محتوى فارغ و eos id فارغ: R"()". قد يحتوي eos id نفسه على علامات اقتباس: هي سلسلة صالحة (يوجد eos id هنا). لا تعمل تسلسلات الهروب في السلاسل النصية الخام.R""(I asked, "Can you hear me?")"""

تدعم لغة D بعض محددات الاقتباس، حيث تبدأ السلاسل النصية بعلامة q"اقتباس متبوعة بعلامة فتح وتنتهي بعلامة إغلاق مناسبة ". أزواج المحددات المتاحة هي (): ، <>، {}، و []؛ أما المحدد غير المعرف غير المزدوج فهو علامة إغلاق خاصة به. تتداخل المحددات المزدوجة، لذا فإن السلسلة النصية q"(A pair "()" of parens in quotes)"تُعدّ حرفًا صالحًا؛ مثال على استخدام حرف غير متداخل /هو q"/I asked, "Can you hear me?"/". على غرار C++11، تسمح D باستخدام نصوص حرفية على نمط المستند المضمن مع معرّفات نهاية السلسلة.

q" end-of-string-id newline content newline end-of-string-id "

في اللغة D، يجب أن يكون معرف نهاية السلسلة معرفًا (أحرفًا أبجدية رقمية).

في بعض لغات البرمجة، مثل sh و Perl ، توجد محددات مختلفة يتم التعامل معها بشكل مختلف، مثل إجراء استيفاء السلسلة أو عدمه، وبالتالي يجب توخي الحذر عند اختيار المحدد الذي سيتم استخدامه؛ انظر القسم الخاص بأنواع السلاسل المختلفة أدناه.

الاقتباس المتعدد

ومن الإضافات الأخرى استخدام الاقتباس المتعدد ، والذي يسمح للمؤلف باختيار الأحرف التي يجب أن تحدد حدود السلسلة النصية.

على سبيل المثال، في لغة بيرل :

قلتُ: "هل تسمعني ؟ "

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

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

local ls = [=[ يمكن استخدام هذه الصيغة لمسارات ويندوز: local path = [[C:\Windows\Fonts]] ]=]

يُعدّ استخدام علامات الاقتباس المتعددة مفيدًا بشكل خاص مع التعبيرات النمطية التي تحتوي على فواصل شائعة مثل علامات الاقتباس، إذ يُغني ذلك عن الحاجة إلى استخدام علامات الهروب. ومن الأمثلة المبكرة على ذلك الأمر sed ، حيث يمكن استبدال فواصل الشرطة المائلة الافتراضية في أمر الاستبدال بحرف آخر، كما في المثال التالي : .s/regex/replacement//s,regex,replacement,

دوال البناء

ثمة خيار آخر، نادر الاستخدام في اللغات الحديثة، وهو استخدام دالة لإنشاء سلسلة نصية بدلاً من تمثيلها بنص حرفي. لا يُستخدم هذا الخيار عمومًا في اللغات الحديثة لأن الحساب يتم أثناء التشغيل، وليس أثناء التحليل.

على سبيل المثال، لم تتضمن الإصدارات الأولى من لغة BASICCHR$ تسلسلات الهروب أو أي حلول بديلة أخرى مذكورة هنا، وبالتالي كان على المستخدم استخدام الدالة التي تُرجع سلسلة نصية تحتوي على الحرف المقابل لوسيطها. في نظام ASCII، قيمة علامة الاقتباس هي 34، لذا لتمثيل سلسلة نصية تحتوي على علامات اقتباس في نظام ASCII، يُكتب

قلتُ: " + CHR$ ( 34 ) + "هل تسمعني؟" + CHR$ ( 34 )

في لغة C، تتوفر ميزة مماثلة عبر sprintfمُحدد %cتنسيق "character"، على الرغم من أنه في وجود حلول بديلة أخرى، لا يتم استخدام هذا بشكل عام:

char buffer [ 32 ]; snprintf ( buffer , sizeof buffer , "This is %cin quotes.%c" , 34 , 34 );

يمكن استخدام دوال البناء هذه لتمثيل الأحرف غير القابلة للطباعة، مع أن تسلسلات الهروب تُستخدم عادةً بدلاً منها. ويمكن استخدام تقنية مماثلة في لغة C++ مع std::stringعامل تحويل الأحرف إلى سلاسل نصية.

تسلسلات الهروب

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

يُختار حرف واحد كبادئة لتوفير ترميز للأحرف التي يصعب أو يستحيل تضمينها مباشرةً. أكثر هذه الأحرف شيوعًا هو الشرطة المائلة العكسية (\ ). إضافةً إلى الأحرف الأخرى، من المهم الإشارة إلى أن الشرطة المائلة العكسية نفسها يمكن ترميزها كشرطتين مائلتين عكسيتين، \\وبالنسبة للسلاسل النصية المحددة، يمكن ترميز المحدد نفسه باستخدام علامة الهروب (\)، على سبيل المثال، باستخدام علامة الهروب (\) للدلالة \"على ". يمكن كتابة تعبير نمطي لهذه السلاسل النصية المُهرّبة كما يلي، كما هو موجود في مواصفات ANSI C : [ 1 ] [ c ]

" "(\\.|[^\\"])*

بمعنى "علامة اقتباس؛ متبوعة بصفر أو أكثر من حرف مُهَرَّب (شرطة مائلة عكسية متبوعة بشيء ما، ربما شرطة مائلة عكسية أو علامة اقتباس)، أو حرف غير مُهَرَّب وغير مُوَضَّح؛ وتنتهي بعلامة اقتباس" - تكمن المشكلة الوحيدة في التمييز بين علامة الاقتباس النهائية وعلامة الاقتباس التي تسبقها شرطة مائلة عكسية، والتي قد تكون مُهَرَّبة بدورها. يمكن أن تتبع عدة أحرف الشرطة المائلة العكسية، مثل \uFFFF، اعتمادًا على نظام الهروب.

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

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

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

على سبيل المثال، في سلسلة نصية بلغة C ، إذا تبعت الشرطة المائلة العكسية حرف مثل "b" أو "n" أو "t"، فإن هذا يمثل حرف مسافة للخلف أو سطرًا جديدًا أو علامة جدولة غير قابلة للطباعة على التوالي. أو إذا تبعت الشرطة المائلة العكسية من 1 إلى 3 أرقام ثمانية ، فإن هذا التسلسل يُفسر على أنه يمثل وحدة الترميز العشوائية ذات القيمة المحددة في ترميز السلسلة النصية (على سبيل المثال، رمز ASCII المقابل لسلسلة نصية ASCII). وقد تم توسيع هذا لاحقًا للسماح باستخدام ترميز الأحرف الست عشري الأكثر حداثة.

قلتُ: " هل تسمعني ؟ "
تسلسل الهروبيونيكودالأحرف الحرفية الموضوعة في سلسلة نصية
0U+0000الحرف الفارغ [ 2 ] [ 3 ] (عادةً كحالة خاصة من الترميز الثماني \ooo)
\aU+0007تنبيه [ 4 ] [ 5 ]
\bU+0008مسافة للخلف [ 4 ]
\fU+000Cتغذية النموذج [ 4 ]
\nU+000Aتغذية السطر [ 4 ] (أو سطر جديد في POSIX)
\rU+000Dإرجاع المؤشر [ 4 ] (أو سطر جديد في نظام التشغيل Mac OS 9 والإصدارات الأقدم)
\tU+0009علامة تبويب أفقية [ 4 ]
\vU+000Bعلامة تبويب عمودية [ 4 ]
\eU+001Bحرف الهروب [ 5 ] ( GCC ، [ 6 ] clang و tcc )
✓####U+####حرف يونيكود ذو 16 بت حيث #### هي أربعة أرقام سداسية عشرية [ 3 ]
U########U+######حرف يونيكود 32 بت حيث ######## هي ثمانية أرقام سداسية عشرية (مساحة أحرف يونيكود حاليًا 21 بت فقط، لذا فإن أول رقمين سداسيين عشريين سيكونان دائمًا صفرًا)
\u{###### }U+######حرف يونيكود ذو 21 بت، حيث يمثل ###### عددًا متغيرًا من الأرقام السداسية عشرية.
\x##يعتمد على الترميز [ د ]مواصفات حرفية من 8 بت حيث يمثل # رقمًا سداسيًا عشريًا. لا يقتصر طول تسلسل الهروب السداسي العشري على رقمين، بل يكون بطول عشوائي. [ 4 ]
\oooيعتمد على الترميز [ د ]مواصفات الأحرف ذات 8 بت حيث o هو رقم ثماني [ 4 ]
\"U+0022علامة اقتباس مزدوجة (") [ 4 ]
&حرف غير حرفي يستخدم لتحديد الهروب الرقمي في لغة هاسكل [ 2 ]
\'U+0027علامة اقتباس مفردة (') [ 4 ]
\\U+005Cالشرطة المائلة العكسية (\) [ 4 ]
؟U+003Fعلامة استفهام (?) [ 4 ]

ملاحظة: لا تدعم جميع المحللات جميع التسلسلات الموجودة في القائمة، وقد تكون هناك تسلسلات هروب أخرى غير موجودة في القائمة.

الهروب المتداخل

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

قد يُشكّل استخدام علامات اقتباس غير صحيحة للسلاسل النصية المتداخلة ثغرة أمنية. لذا، يُنصح باستخدام عبارات مُجهزة عند التعامل مع بيانات غير موثوقة، كما هو الحال في حقول بيانات استعلام SQL، وذلك لمنع هجمات حقن التعليمات البرمجية . في إصدارات PHP من 2 إلى 5.3، كانت هناك ميزة تُسمى " علامات الاقتباس السحرية" تُهرّب السلاسل النصية تلقائيًا (لتسهيل الاستخدام ولأغراض أمنية)، ولكن نظرًا لوجود مشاكل، فقد أُزيلت هذه الميزة بدءًا من الإصدار 5.4.

أوتار خام

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

تُعدّ السلاسل النصية الخام مفيدةً للغاية عند الحاجة إلى تهريب حرف شائع، لا سيما في التعبيرات النمطية (المُضمّنة كسلاسل نصية حرفية)، حيث \يُستخدم الخط المائل العكسي بكثرة، وفي مسارات DOS/Windows ، حيث يُستخدم الخط المائل العكسي كفاصل للمسارات. يُعرف الإفراط في استخدام الخط المائل العكسي بمتلازمة عود الأسنان المائل ، ويمكن تقليله باستخدام السلاسل النصية الخام. قارن بين أسماء المسارات المُهرّبة والخام في لغة C#:

"مسار ويندوز هو C:\\Foo\\Bar\\Baz\\" @"مسار ويندوز هو C:\Foo\Bar\Baz\"

تظهر أمثلة متطرفة عند دمج هذه العوامل - تبدأ مسارات اصطلاح التسمية الموحد\\ بـ `_____`، وبالتالي يبدأ التعبير النمطي المُهَرَّب الذي يطابق اسم UNC بثمانية شرطات مائلة عكسية، `_____` "\\\\\\\\"، وذلك بسبب الحاجة إلى تهريب السلسلة والتعبير النمطي. يقلل استخدام السلاسل الخام هذا العدد إلى أربعة (باستخدام التهريب في التعبير النمطي)، كما هو الحال في لغة C# @"\\\\".

في مستندات XML، تسمح أقسام CDATA باستخدام أحرف مثل & و < دون أن يحاول محلل XML تفسيرها كجزء من بنية المستند نفسه. وهذا مفيد عند تضمين نصوص حرفية ورموز برمجية، للحفاظ على بنية المستند سليمة .

<![CDATA[ if (path!=null && depth<2) { add(path); } ]]>

سلاسل نصية متعددة الأسطر

في العديد من لغات البرمجة، يمكن أن تحتوي النصوص الحرفية على أسطر جديدة حرفية تمتد على عدة أسطر. ويمكن بدلاً من ذلك استخدام علامة الهروب (\) قبل الأسطر الجديدة، وغالبًا ما يكون ذلك باستخدام \n. على سبيل المثال:

echo 'foo bar'

و

echo -e "foo\nbar"

كلاهما عبارات BASH صحيحة ، وكلاهما ينتج نفس المخرجات:

فو حاجِز

تشمل اللغات التي تسمح باستخدام أسطر جديدة حرفيًا: BASH و Lua و Perl و PHP و R و Tcl . في بعض اللغات الأخرى، لا يمكن أن تتضمن النصوص الحرفية أسطرًا جديدة.

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

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

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

يسمح Tcl بوجود أسطر جديدة حرفية في السلاسل النصية وليس لديه صيغة خاصة للمساعدة في التعامل مع السلاسل النصية متعددة الأسطر، على الرغم من أنه يمكن وضع المحددات على الأسطر بمفردها وإزالة الأسطر الجديدة البادئة واللاحقة عبر string trim، بينما string mapيمكن استخدام لإزالة المسافة البادئة.

دمج السلاسل النصية الحرفية

تُتيح بعض لغات البرمجة دمج السلاسل النصية ، حيث تُدمج السلاسل النصية المتجاورة ضمنيًا في سلسلة نصية واحدة أثناء الترجمة. هذه ميزة في لغات C، [ 7 ] [ 8 ] و C++، [ 9 ] وD، [ 10 ] وRuby، [ 11 ] وPython، [ 12 ] التي استُنسخت منها من لغة C. [ 13 ] والجدير بالذكر أن هذا الدمج يحدث أثناء الترجمة، خلال التحليل المعجمي (كمرحلة تلي التجزئة الأولية)، ويُقارن بدمج السلاسل النصية أثناء التشغيل (عادةً باستخدام +المعامل) [ 14 ] والدمج أثناء طي الثوابت ، الذي يحدث أثناء الترجمة، ولكن في مرحلة لاحقة (بعد تحليل العبارات أو "التحليل النحوي"). معظم اللغات، مثل C# و Java [ 15 ] و Perl، لا تدعم دمج السلاسل النصية الضمني، وبدلاً من ذلك تتطلب دمجًا صريحًا، كما هو الحال مع +عامل التشغيل (هذا ممكن أيضًا في D و Python، ولكنه غير قانوني في C/C++ - انظر أدناه)؛ في هذه الحالة، قد يحدث الدمج في وقت الترجمة، عبر طي الثوابت، أو قد يتم تأجيله إلى وقت التشغيل.

تحفيز

في لغة C، حيث نشأ المفهوم والمصطلح، تم تقديم دمج السلاسل النصية لسببين: [ 16 ]

  • للسماح للسلاسل الطويلة بالامتداد على عدة أسطر مع الحفاظ على المسافة البادئة المناسبة، على عكس استمرار السطر الذي يُفسد نظام المسافة البادئة؛ و
  • للسماح بإنشاء سلاسل نصية حرفية بواسطة وحدات الماكرو (عن طريق تحويلها إلى سلاسل نصية ). [ 17 ]

عمليًا، يسمح هذا بدمج السلاسل النصية في المراحل المبكرة من الترجمة (وتحديدًا كجزء من التحليل المعجمي)، دون الحاجة إلى تحليل العبارات أو طي الثوابت. على سبيل المثال، ما يلي هو كود C صحيح:

char s [] = "hello, " "world" ; printf ( "hello, " "world" );

لكن ما يلي غير صحيح:

char s [] = "hello, " + "world" ; printf ( "hello, " + "world" );

وذلك لأن السلاسل النصية لها نوع مصفوفة ، char[](في لغة C) أو const char[](في لغة C++)، وهو نوع لا يمكن جمعه؛ وهذا ليس قيدًا في معظم اللغات الأخرى. تجدر الإشارة إلى أن operator+هذه الدالة مُحمّلة بشكل زائد للسلاسل النصية في لغة C++.

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

char file_and_message [] = __FILE__ ": message" ;

سوف يتم توسيع الملف (إذا كان اسمه ac) إلى:

char file_and_message [] = "ac" ": message" ;

ثم يتم دمجها، لتكون مكافئة لما يلي:

char file_and_message [] = "ac: message" ;

من الاستخدامات الشائعة إنشاء سلاسل التنسيقprintf() أو تنسيقها ، حيث يتم تحديد مُحدِّدات التنسيق بواسطة وحدات الماكرو. [ 18 ] [ 19 ]scanf()

يستخدم مثال أكثر تعقيدًا تحويل الأعداد الصحيحة إلى سلسلة نصية (بواسطة المعالج المسبق) لتعريف ماكرو يتوسع إلى سلسلة من السلاسل النصية الحرفية، والتي يتم بعد ذلك دمجها في سلسلة نصية حرفية واحدة مع اسم الملف ورقم السطر: [ 20 ]

#define STRINGIFY(x) #x #define TOSTRING(x) STRINGIFY(x) #define AT __FILE__ ":" TOSTRING(__LINE__)

إلى جانب المتطلبات النحوية للغة C/C++، يُعدّ الربط الضمني شكلاً من أشكال التسهيل النحوي ، مما يُسهّل تقسيم السلاسل النصية على عدة أسطر، ويُغني عن الحاجة إلى استمرار السطر (عبر الشرطات المائلة العكسية)، ويُتيح إضافة تعليقات إلى أجزاء من السلاسل النصية. على سبيل المثال، في لغة بايثون، يُمكن التعليق على تعبير نمطي بهذه الطريقة: [ 21 ]

استورد re من re استورد Patternالنمط : النمط = re.compile ( "[A-Za-z_]" # حرف أو شرطة سفلية " [ A-Za-z0-9_]*" # حرف أو رقم أو شرطة سفلية )

مشاكل

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

l : list [ str ] = [ "foo" , "bar" "zork" ]

وبناءً على ذلك، لا يُستخدم هذا الأسلوب في معظم اللغات، وقد اقتُرح إيقاف استخدامه في لغتي D [ 22 ] و Python [ 13 ] . ومع ذلك، فإن إزالة هذه الميزة تُخلّ بالتوافق مع الإصدارات السابقة، واستبدالها بمعامل دمج يُثير مشكلات تتعلق بالأسبقية - إذ يحدث دمج السلاسل النصية أثناء التحليل المعجمي، قبل تقييم المعاملات، بينما يحدث الدمج باستخدام معامل صريح في الوقت نفسه مع المعاملات الأخرى، وبالتالي تُصبح الأسبقية مشكلة، وقد تتطلب استخدام أقواس لضمان ترتيب التقييم المطلوب.

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

أنواع مختلفة من الأوتار

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

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

على سبيل المثال، في بايثون ، تُسبق السلاسل الخام بعلامة rأو R- قارن 'C:\\Windows'مع r'C:\Windows'(مع ذلك، لا يمكن أن تنتهي سلسلة بايثون الخام بعدد فردي من علامات الخط المائل العكسي). يميز بايثون 2 أيضًا نوعين من السلاسل: سلاسل ASCII ذات 8 بت ("بايت") (وهي الافتراضية)، ويُشار إليها صراحةً بعلامة bأو B، وسلاسل Unicode، ويُشار إليها بعلامة uأو U. [ 25 ] بينما في بايثون 3، تكون السلاسل Unicode افتراضيًا، والبايتات bytesنوع منفصل يجب أن تُسبق بعلامة عند تهيئتها بين علامتي اقتباس b.

تُسمى طريقة كتابة السلاسل الخام في لغة C# بـ @-quoting.

@"C:\Foo\Bar\Baz\"

بينما يؤدي هذا إلى تعطيل الهروب، فإنه يسمح بعلامات الاقتباس المزدوجة، مما يسمح بتمثيل علامات الاقتباس داخل السلسلة:

قلت: "مرحباً."

يسمح C++11 بالسلاسل النصية الخام، وسلاسل Unicode (UTF-8، وUTF-16، وUTF-32)، وسلاسل الأحرف العريضة، والتي يتم تحديدها بواسطة البادئات. كما يضيف قيمًا حرفية للغة C++ الحالية string، والتي تُفضّل عمومًا على سلاسل نمط C الحالية.

في لغة Tcl، تكون السلاسل النصية المحددة بأقواس معقوفة حرفية، بينما تحتوي السلاسل النصية المحددة بعلامات اقتباس على الهروب والاستيفاء.

تحتوي لغة بيرل على مجموعة واسعة من السلاسل النصية، والتي تُعتبر رسميًا عوامل تشغيل، وتُعرف باسم عوامل الاقتباس وعوامل شبيهة بالاقتباس . تشمل هذه العوامل كلاً من الصيغة المعتادة (بفواصل ثابتة) والصيغة العامة، التي تسمح باختيار الفواصل. ومن أمثلة هذه العوامل: [ 26 ]

'' "" `` // m// qr// s/// y // / q{} qq{} qx{} qw{} m{} qr{} s{}{} tr {}{} y {}{}

يستخدم REXX أحرف اللاحقة لتحديد الأحرف أو السلاسل النصية باستخدام رمزها الست عشري أو الثنائي. على سبيل المثال،

'20' x "0010 0000" b "00100000" b 

جميعها تؤدي إلى ظهور حرف المسافة ، مما يتجنب استدعاء الدالة X2C(20).

استيفاء السلاسل

في بعض لغات البرمجة، قد تحتوي السلاسل النصية على عناصر نائبة تشير إلى متغيرات أو تعابير في السياق الحالي ، والتي يتم تقييمها (عادةً أثناء التشغيل). يُشار إلى هذا باسم استيفاء المتغيرات ، أو بشكل أعم، استيفاء السلاسل النصية . تميز اللغات التي تدعم الاستيفاء عادةً بين السلاسل النصية المستوفاة وغير المستوفاة. على سبيل المثال، في أنظمة يونكس المتوافقة مع sh (وكذلك في بيرل وروبي)، تُدمج السلاسل النصية المُحاطة بعلامات اقتباس مزدوجة (المفصولة بعلامتي اقتباس، ") مع علامات الاقتباس، بينما لا تُدمج السلاسل النصية المُحاطة بعلامات اقتباس مفردة (المفصولة بعلامة اقتباس مفردة، ' ). يُشار أحيانًا إلى السلاسل النصية غير المُدمجة باسم "السلاسل الخام"، ولكن هذا يختلف عن "السلسلة الخام" من حيث الهروب. على سبيل المثال، في بايثون، تُسمى السلسلة النصية التي تبدأ بـ rأو بـ "سلسلة خام" ولا تحتوي على هروب أو دمج، [ 27 ] بينما تحتوي السلسلة النصية العادية (بدون بادئة) على هروب ولكن لا تحتوي على دمج، [ 28 ] وتُسمى السلسلة النصية التي تبدأ بـ أو بـ "سلسلة f" [ 29 ] وتحتوي على هروب [ 30 ] ودمج. [ 31 ]RfF

على سبيل المثال، كود بيرل التالي :

$name = "نانسي" ; $greeting = "مرحباً بالعالم" ; print "قالت $name $greeting لحشد الناس." ;

ينتج المخرجات التالية:

قالت نانسي "مرحباً بالعالم" لحشد الناس.

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

ينبغي مقارنة ذلك بالدالة printfالتي تنتج نفس المخرجات باستخدام رموز مثل:

printf "قال %s %s لحشد الناس." , $name , $greeting ;

لكنها لا تقوم بعملية الاستيفاء: إنها %sعنصر نائب في سلسلة تنسيق printf ، لكن المتغيرات نفسها تقع خارج السلسلة.

وهذا يختلف عن السلاسل "الخام":

اطبع 'قال $name $greeting لحشد الناس.' ;

والتي تنتج مخرجات مثل:

قال $name مخاطباً حشد الناس: $greeting.

هنا، لا تُعتبر علامات الدولار ($) أحرفًا خاصة، ولا يتم تفسيرها على أنها تحمل أي معنى آخر غير النص العادي.

تضمين شفرة المصدر في سلاسل نصية حرفية

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

على سبيل المثال:

  • كتابة التعليمات البرمجية لإنتاج الكينوا
  • توليد لغة إخراج من داخل قالب ويب ؛
  • استخدام XSLT لإنشاء XSLT، أو SQL لإنشاء المزيد من SQL
  • إنشاء تمثيل PostScript لمستند لأغراض الطباعة، من داخل تطبيق معالجة المستندات المكتوب بلغة C أو أي لغة أخرى.

ومع ذلك، فإن بعض اللغات مهيأة بشكل خاص لإنتاج هذا النوع من المخرجات المتشابهة ذاتيًا، وخاصة تلك التي تدعم خيارات متعددة لتجنب تضارب المحددات.

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

انظر أيضاً

ملحوظات

  1. يمكن اعتبار النطاق "المختلط" بمثابة أجزاء بارزة في مخطط فين (أي الأجزاء غير المشتركة). أما النطاق الهرمي فيمكن اعتباره بمثابة دمية متداخلة أو مجموعة من الدوائر متحدة المركز .
  2. أي، قواعد ترتيب العمليات، على غرار PEMDAS ، ولكنها مصممة خصيصًا للبرمجة بدلاً من الرياضيات العامة، مثل كيف^يمثل أحيانًا XOR على مستوى البت أو StartOfString_RegEx (حسب السياق) في البرمجة ولكنه يمثل AND أو ExponentPower (مرة أخرى، يعتمد على السياق) في الرياضيات.
  3. لم يتم وضع علامات اقتباس أو هروب للرمز النمطي المذكور هنا، وذلك لتقليل الالتباس.
  4. 1 2 بما أن تسلسل الهروب هذا يمثل وحدة رمز محددةبدلاً من حرف محدد، فإن نقطة الرمز (إن وجدت) التي يمثلها تعتمد على ترميز السلسلة الحرفية التي تم العثور عليها فيها.

مراجع

  1. "قواعد لغة ANSI C، مواصفات Lex" . liu.se. تم الاطلاع عليه بتاريخ 29 يونيو 2026 .
  2. 1 2 "الملحق ب. الأحرف والسلاسل وقواعد الهروب" . realworldhaskell.org . تم الاطلاع عليه في 22 يونيو 2016 .
  3. 1 2 "سلسلة نصية" . mozilla.org . تم الاطلاع عليه بتاريخ 22 يونيو 2016 .
  4. 1 2 3 4 5 6 7 8 9 10 11 12 13 " تسلسلات الهروب (C)" . microsoft.com . تم الاطلاع عليه بتاريخ 22 يونيو 2016 .
  5. 1 2 "الأساس المنطقي للمعيار الدولي - لغات البرمجة - لغة C" (ملف PDF) . 5.10 أبريل 2003. الصفحات 52، 153-154 ، 159. مؤرشف (ملف PDF) من الأصل بتاريخ 2016-06-06 . تم الاطلاع عليه بتاريخ 2010-10-17 . 
  6. "6.35 الحرف <ESC> في الثوابت" ، دليل GCC 4.8.2 ، تم الاطلاع عليه بتاريخ 2014-03-08
  7. مسودة معيار C11 ، مسودة لجنة WG14 N1570 — 12 أبريل 2011 ، 5.1.1.2 مراحل الترجمة، ص 11: "6. يتم دمج الرموز الحرفية المتجاورة للسلسلة."
  8. بناء جملة لغة C: دمج السلاسل النصية الحرفية
  9. مسودة معيار C++11 ، "مسودة عمل، معيار للغة البرمجة C++" (PDF) .، 2.2 مراحل الترجمة [lex.phases]، ص 17: "6. يتم دمج رموز السلاسل النصية المتجاورة." و2.14.5 السلاسل النصية [lex.string]، ملاحظة 13، ص 28-29: "في مرحلة الترجمة 6 (2.2)، يتم دمج السلاسل النصية المتجاورة."
  10. لغة البرمجة D ، التحليل المعجمي ، "السلاسل النصية الحرفية": "يتم دمج السلاسل المتجاورة باستخدام عامل التشغيل ~، أو عن طريق التجاور البسيط:"
  11. روبي: لغة برمجة روبي ، لغة برمجة روبي، 19-10-2017 ، تم الاطلاع عليه بتاريخ 19-10-2017
  12. مرجع لغة بايثون، 2. التحليل المعجمي، 2.4.2. دمج السلاسل النصية الحرفية : "يُسمح باستخدام سلاسل نصية حرفية متعددة متجاورة (مفصولة بمسافات بيضاء)، ربما باستخدام اصطلاحات اقتباس مختلفة، ويكون معناها هو نفسه معناها عند دمجها."
  13. 1 2 3 أفكار بايثون، " هل يُعتبر دمج السلاسل النصية الضمني ضارًا؟ "، غيدو فان روسوم، 10 مايو 2013
  14. مرجع لغة بايثون، 2. التحليل المعجمي، 2.4.2. دمج السلاسل النصية : "لاحظ أن هذه الميزة مُعرَّفة على المستوى النحوي، ولكنها تُنفَّذ في وقت الترجمة. يجب استخدام عامل التشغيل '+' لدمج تعابير السلاسل النصية في وقت التشغيل."
  15. "السلاسل النصية (دروس جافا™ > تعلم لغة جافا > الأرقام والسلاسل النصية)" . Docs.oracle.com . 2012-02-28 . تم الاطلاع عليه بتاريخ 2016-06-22 .
  16. الأساس المنطقي للغة البرمجة ANSI C. دار نشر سيليكون. 1990. ص 31. ISBN  0-929306-07-4.3.1.4 السلاسل النصية الحرفية : "يمكن تمديد سلسلة نصية طويلة عبر عدة أسطر باستخدام خاصية تمديد السطر (الشرطة المائلة العكسية - سطر جديد)، ولكن هذه الطريقة تتطلب أن يبدأ تمديد السلسلة من الموضع الأول في السطر التالي. ولإتاحة مرونة أكبر في التنسيق، وحل بعض مشاكل المعالجة المسبقة (انظر §3.8.3)، قدمت اللجنة خاصية دمج السلاسل النصية الحرفية. حيث يتم دمج سلسلتين نصيتين حرفيتين متتاليتين (بدون حرف فارغ في المنتصف) لتكوين سلسلة نصية حرفية واحدة. تتيح هذه الإضافة إلى لغة C للمبرمج تمديد سلسلة نصية حرفية إلى ما بعد نهاية السطر الفعلي دون الحاجة إلى استخدام آلية تمديد السطر (الشرطة المائلة العكسية - سطر جديد)، وبالتالي الحفاظ على نظام المسافة البادئة للبرنامج. لم يتم تقديم عامل دمج صريح لأن الدمج هو بنية معجمية وليس عملية وقت التشغيل."
  17. الأساس المنطقي للغة البرمجة ANSI C. دار نشر سيليكون. 1990. ص 6566. ISBN  0-929306-07-4.3.8.3.2 عامل # : "تم تقديم عامل # لتحويل البيانات إلى سلاسل نصية. لا يمكن استخدامه إلا في توسيع #define. يؤدي هذا العامل إلى استبدال اسم المعامل الرسمي التالي بسلسلة نصية حرفية مُشكَّلة من خلال تحويل تسلسل رموز الوسيط الفعلي إلى سلسلة نصية. بالاقتران مع دمج السلاسل النصية الحرفية (انظر §3.1.4)، يسمح استخدام هذا العامل بإنشاء سلاسل نصية بنفس فعالية استبدال المعرف داخل السلسلة النصية. يوضح مثال في المعيار هذه الميزة."
  18. مجلة مستخدمي لغة C/C++، المجلد 19، صفحة 50
  19. "بايثون - لماذا يُسمح بدمج السلاسل النصية؟" . ستاك أوفرفلو . تم الاطلاع عليه بتاريخ 22-06-2016 .
  20. "تحويل LINE__ إلى سلسلة نصية (stringify) باستخدام توجيهات المعالج المسبق" . Decompile.com . 12-10-2006 . تم الاطلاع عليه بتاريخ 22-06-2016 .
  21. مرجع لغة بايثون، 2. التحليل المعجمي، 2.4.2. دمج السلاسل النصية الحرفية : "يمكن استخدام هذه الميزة لتقليل عدد الشرطات المائلة العكسية المطلوبة، أو لتقسيم السلاسل النصية الطويلة بسهولة عبر أسطر طويلة، أو حتى لإضافة تعليقات إلى أجزاء من السلاسل النصية، على سبيل المثال:
  22. نظام تتبع المشكلات في DLang - المشكلة رقم 3827 - التحذير من ثم إيقاف استخدام الربط الضمني للسلاسل النصية المتجاورة
  23. مسودة معيار C++11 ، "مسودة عمل، معيار للغة البرمجة C++" (PDF) .، 2.14.5 السلاسل النصية الحرفية [lex.string]، ملاحظة 13، ص 28-29: "أي عمليات ربط أخرى مدعومة بشكل مشروط بسلوك محدد من قبل التنفيذ."
  24. "STR10-C. لا تقم بدمج أنواع مختلفة من السلاسل النصية - التشفير الآمن - معايير التشفير الآمن CERT" . مؤرشف من الأصل في 14 يوليو 2014. تم الاطلاع عليه في 3 يوليو 2014 .
  25. "2. التحليل المعجمي — وثائق بايثون 2.7.12rc1" . python.org . تم الاطلاع عليه بتاريخ 22 يونيو 2016 .
  26. "perlop - perldoc.perl.org" . perl.org . تم الاطلاع عليه بتاريخ 22 يونيو 2016 .
  27. "2. التحليل المعجمي" . مرجع لغة بايثون . مؤسسة برمجيات بايثون. 2.4.1. القيم النصية والبايتات. يمكن إضافة بادئة اختيارية لكل من القيم النصية والبايتات ، وتسمى هذه البنى على التوالي بالقيم النصية الخام والقيم البايتات الخام ، وتُعامل الشرطات المائلة العكسية كأحرف حرفية.'r''R'يُستخدم مصطلح "السلسلة الخام" في أقسام أخرى من هذا المصدر.
  28. "2. التحليل المعجمي" . مرجع لغة بايثون . مؤسسة برمجيات بايثون. 2.4.1.1. تسلسلات الهروب.يتم تفسير تسلسلات الهروب في السلاسل النصية والبايتات الحرفية بدون بادئة 'r'أو 'R'وفقًا لقواعد مشابهة لتلك المستخدمة في لغة C القياسية. يتم فك تشفير تسلسلات الهروب في "سلاسل نصية عادية" كما هو موضح في القسم 2.4.3. f-strings.
  29. "2. التحليل المعجمي" . مرجع لغة بايثون . مؤسسة برمجيات بايثون. 2.4.3. السلاسل النصية المنسقة (f-strings). السلسلة النصية المنسقة أو f-string هي سلسلة نصية مسبوقة بـ أو .'f''F'
  30. "2. التحليل المعجمي" . مرجع لغة بايثون . مؤسسة برمجيات بايثون. 2.4.3. السلاسل النصية f.تُفكّ رموز تسلسلات الهروب في السلاسل النصية المُنسّقة (f-strings) كما تُفكّ رموز السلاسل النصية العادية، باستثناء حالة كون السلسلة النصية المُنسّقة مُعلّمة أيضًا كسلسلة نصية خام. يُطلق على هذا النوع الأخير من السلاسل النصية المُنسّقة اسم "السلسلة النصية الخام المُنسّقة"، وللمزيد من التفاصيل، راجع القسم 2.4.1: السلاسل النصية والبايتات. تجدر الإشارة أيضًا إلى أنه قبل إصدار بايثون 3.12، لم يكن مسموحًا باستخدام علامات الهروب (الشرطات المائلة العكسية) داخل حقل استبدال السلسلة النصية المُنسّقة.
  31. ف. سميث، إريك (1 أغسطس 2015). "PEP 498 - استيفاء السلاسل النصية الحرفية" . مقترحات تحسين بايثون . مؤسسة برمجيات بايثون. ملخص.يقترح PEP 498 آلية جديدة لتنسيق السلاسل تسمى استيفاء السلاسل الحرفية، ويشير إلى السلاسل المستخدمة في تلك الآلية باسم "سلاسل f".