سؤال

لدي سلسلة مثل 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 ، والمزيد من التفسيرات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top