كيف يمكن إزالة مائلات متعددة متعددة من عنوان URL في Ruby
-
03-10-2019 - |
سؤال
ما أحاول تحقيقه هنا هو أن نقول أن لدينا عناوين 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"