نمط لوا لاستخراج / استبدال القيمة في / /
-
30-09-2019 - |
سؤال
لدي سلسلة مثل hello /world today/
أنا بحاجة إلى استبدال /world today/
مع /MY NEW STRING/
قراءة الدليل الذي وجدته
newString = string.match("hello /world today/","%b//")
الذي يمكنني استخدامه مع gsub
للاستبدال ، لكنني تساءلت هل هناك أيضًا طريقة أنيقة لإعادة النص فقط بين /
, ، أعلم أنه يمكنني فقط تقليمه ، لكنني تساءلت عما إذا كان هناك نمط.
المحلول
جرب شيء مثل واحد مما يلي:
slashed_text = string.match("hello /world today/", "/([^/]*)/")
slashed_text = string.match("hello /world today/", "/(.-)/")
slashed_text = string.match("hello /world today/", "/(.*)/")
هذا يعمل بسبب string.match
إرجاع أي أسرات من النمط ، أو النص المتطابق بأكمله إذا لم يكن هناك أسر. المفتاح إذن هو التأكد من أن النمط لديه مقدار مناسب من الجشع ، مع تذكر أن أنماط LUA ليست لغة تعبير منتظمة كاملة.
يجب أن يتطابق الأولين من نفس النصوص. في البداية ، طلبت صراحة أن يتطابق النمط مع أكبر عدد ممكن من غير المرن. يطابق الجزء الثاني (شكرًا LHF) أقصر أي شخصيات على الإطلاق يليه مائل. والثالث هو الجشع ، وهو يطابق أطول فترة من الشخصيات التي لا يزال من الممكن أن يتبعها مائل.
ال %b//
في السؤال الأصلي ليس له أي مزايا /.-/
منذ أن هما المحددان هما نفس الشخصية.
يحرر: وأضاف نمط اقترحه LHF ، والمزيد من التفسيرات.