كيف يمكن إزالة مائلات متعددة متعددة من عنوان URL في Ruby

StackOverflow https://stackoverflow.com/questions/2765483

سؤال

ما أحاول تحقيقه هنا هو أن نقول أن لدينا عناوين URL مثال:

url1 = "http://emy.dod.com/kaskaa/dkaiad/amaa//////////"
url2 = "http://www.example.com/"

كيف يمكنني استخراج عناوين URL المخططة لأسفل؟

url1 = "http://emy.dod.com/kaskaa/dkaiad/amaa"
url2 = "http://http://www.example.com"

URI.parse في Ruby يقوم بتطهير نوع معين من URL المشوه ولكنه غير فعال في هذه الحالة.

إذا استخدمنا regex ثم /^(.*)\/$/ يزيل مائلة واحدة / من url1 وهو غير فعال ل url2.

هل أي شخص على دراية بكيفية التعامل مع هذا النوع من تحليل URL؟

النقطة المهمة هنا هي أنني لا أريد أن يكون لنظامي http://www.example.com/ و http://www.example.com يتم التعامل مع اثنين من عناوين URL مختلفة. ونفس الشيء ينطبق على http://emy.dod.com/kaskaa/dkaiad/amaa//// و http://emy.dod.com/kaskaa/dkaiad/amaa/.

هل كانت مفيدة؟

المحلول

إذا كنت بحاجة فقط إلى إزالة جميع القطع المقطوعة من نهاية سلسلة عنوان URL ، فيمكنك تجربة regex التالية:

"http://emy.dod.com/kaskaa/dkaiad/amaa//////////".sub(/(\/)+$/,'')
"http://www.example.com/".sub(/(\/)+$/,'')

/(\/)+$/ - يجد هذا regex واحد أو أكثر من القطع المائلة في نهاية السلسلة. ثم نستبدل هذه المباراة بسلسلة فارغة.

أتمنى أن يساعدك هذا.

نصائح أخرى

على الرغم من أن هذا الموضوع قديم بعض الشيء والإجابة العليا جيدة جدًا ، لكنني أقترح طريقة أخرى للقيام بذلك:

/^(.*?)\/$/

يمكنك رؤيته في العمل هنا: https://regex101.com/r/vc6yx1/2

السحر هنا *?, الذي يقوم بمباراة كسول. لذلك يمكن ترجمة التعبير بأكمله على النحو التالي:

تطابق مع عدد قليل من الشخصيات قدر الإمكان والتقاطها ، في حين تطابق أكبر عدد ممكن من القطع في النهاية.

مما يعني ، في اللغة الإنجليزية أكثر وضوحًا ، يزيل جميع القطع المتراجعة.

def without_trailing_slash path
  path[ %r(.*[^/]) ]
end

path = "http://emy.dod.com/kaskaa/dkaiad/amaa//////////"

puts without_trailing_slash path # "http://emy.dod.com/kaskaa/dkaiad/amaa"
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top