পূর্ণ বিশ্লেষণ করার জন্য রেজেক্সটি বেশ ভয়াবহ। আমি সুসংগঠিত হওয়ার জন্য নামযুক্ত ব্যাকরিফারেন্সগুলি অন্তর্ভুক্ত করেছি এবং প্রতিটি অংশকে পৃথক রেখায় বিভক্ত করেছি, তবে এটি এখনও এর মতো দেখাচ্ছে:
^(?:(?P<protocol>\w+(?=:\/\/))(?::\/\/))?
(?:(?P<host>(?:(?:&(?:amp|apos|gt|lt|nbsp|quot|bull|hellip|[lr][ds]quo|[mn]dash|permil|\#[1-9][0-9]{1,3}|[A-Za-z][0-9A-Za-z]+);)|[^\/?#:]+)(?::(?P<port>[0-9]+))?)\/)?
(?:(?P<path>(?:(?:&(?:amp|apos|gt|lt|nbsp|quot|bull|hellip|[lr][ds]quo|[mn]dash|permil|\#[1-9][0-9]{1,3}|[A-Za-z][0-9A-Za-z]+);)|[^?#])+)\/)?
(?P<file>(?:(?:&(?:amp|apos|gt|lt|nbsp|quot|bull|hellip|[lr][ds]quo|[mn]dash|permil|\#[1-9][0-9]{1,3}|[A-Za-z][0-9A-Za-z]+);)|[^?#])+)
(?:\?(?P<querystring>(?:(?:&(?:amp|apos|gt|lt|nbsp|quot|bull|hellip|[lr][ds]quo|[mn]dash|permil|\#[1-9][0-9]{1,3}|[A-Za-z][0-9A-Za-z]+);)|[^#])+))?
(?:#(?P<fragment>.*))?$
যে জিনিসটির এটির ভার্বোস হওয়ার প্রয়োজন তা হ'ল প্রোটোকল বা বন্দর ব্যতীত যে কোনও অংশে এইচটিএমএল সত্তা থাকতে পারে যা এই খণ্ডটির চিত্রকে জটিল করে তোলে। তাই গত কয়েক ক্ষেত্রে - হোস্ট, পাথ, ফাইল, querystring, এবং টুকরা, আমরা হয় কোন HTML সত্তা বা কোন চরিত্র নয় একটি অনুমতি ?
বা #
। এইচটিএমএল সত্তার জন্য রেজেক্সগুলি দেখতে এমন দেখাচ্ছে:
$htmlentity = "&(?:amp|apos|gt|lt|nbsp|quot|bull|hellip|[lr][ds]quo|[mn]dash|permil|\#[1-9][0-9]{1,3}|[A-Za-z][0-9A-Za-z]+);"
যখন এটি নিষ্কাশন করা হয় (আমি এটি উপস্থাপনের জন্য একটি গোঁফ সিনট্যাক্স ব্যবহার করেছি), এটি কিছুটা আরও সুস্পষ্ট হয়ে যায়:
^(?:(?P<protocol>(?:ht|f)tps?|\w+(?=:\/\/))(?::\/\/))?
(?:(?P<host>(?:{{htmlentity}}|[^\/?#:])+(?::(?P<port>[0-9]+))?)\/)?
(?:(?P<path>(?:{{htmlentity}}|[^?#])+)\/)?
(?P<file>(?:{{htmlentity}}|[^?#])+)
(?:\?(?P<querystring>(?:{{htmlentity}};|[^#])+))?
(?:#(?P<fragment>.*))?$
অবশ্যই জাভাস্ক্রিপ্টে, আপনি নামযুক্ত ব্যাকরিফারেন্সগুলি ব্যবহার করতে পারবেন না, তাই রেজেেক্স হয়ে যায়
^(?:(\w+(?=:\/\/))(?::\/\/))?(?:((?:(?:&(?:amp|apos|gt|lt|nbsp|quot|bull|hellip|[lr][ds]quo|[mn]dash|permil|\#[1-9][0-9]{1,3}|[A-Za-z][0-9A-Za-z]+);)|[^\/?#:]+)(?::([0-9]+))?)\/)?(?:((?:(?:&(?:amp|apos|gt|lt|nbsp|quot|bull|hellip|[lr][ds]quo|[mn]dash|permil|\#[1-9][0-9]{1,3}|[A-Za-z][0-9A-Za-z]+);)|[^?#])+)\/)?((?:(?:&(?:amp|apos|gt|lt|nbsp|quot|bull|hellip|[lr][ds]quo|[mn]dash|permil|\#[1-9][0-9]{1,3}|[A-Za-z][0-9A-Za-z]+);)|[^?#])+)(?:\?((?:(?:&(?:amp|apos|gt|lt|nbsp|quot|bull|hellip|[lr][ds]quo|[mn]dash|permil|\#[1-9][0-9]{1,3}|[A-Za-z][0-9A-Za-z]+);)|[^#])+))?(?:#(.*))?$
এবং প্রতিটি ম্যাচে, প্রোটোকল হয় \1
, হোস্টটি হয় \2
, বন্দরটি হয় \3
, পথ \4
, ফাইল \5
, ক্যোরিস্ট্রিং \6
এবং খণ্ড \7
।
CrackUrl
। যদি এই জাতীয় কোনও ক্রিয়াকলাপ বিদ্যমান থাকে তবে এটি ব্যবহার করুন, এটি কোনও হ্যান্ড-ক্র্যাফ্ট কোডের চেয়ে আরও নির্ভরযোগ্য এবং আরও দক্ষ হওয়ার গ্যারান্টিযুক্ত।