পাইথনে নিয়মিত প্রকাশের সাথে আপনি কোনও URL টি কীভাবে যাচাই করবেন?


100

আমি গুগল অ্যাপ ইঞ্জিনে একটি অ্যাপ তৈরি করছি। আমি পাইথনে অবিশ্বাস্যরূপে নতুন এবং গত 3 দিন ধরে নিম্নলিখিত সমস্যার বিরুদ্ধে আমার মাথাটি মারছি।

আরএসএস ফিড উপস্থাপন করার জন্য আমার একটি ক্লাস রয়েছে এবং এই শ্রেণিতে আমার সেটআপ নামক একটি পদ্ধতি রয়েছে। এই পদ্ধতির ইনপুট একটি URL।

আমি আরএফসি 3986 রেজি-প্রাইজের ( http://www.ietf.org/rfc/rfc3986.txt ) বৈধতা প্রমাণ করার জন্য পুনরায় পাইথন মডিউলটি ব্যবহার করার চেষ্টা করছি )

নীচে একটি টুকরো টুকরো যা কাজ করা উচিত ?

p = re.compile('^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?')
m = p.match(url)
if m:
  self.url = url
  return url

4
আহ্, দুর্দান্ত আমি এখন এমনকি urlparse মডিউল এমনকি বিদ্যমান ছিল না! সবাইকে ধন্যবাদ!
জি স্পেন্সার

urlparseমডিউল নাম পালটে করা হয় urllib.parseপাইথন 3. চেক docs.python.org/3.7/library/...
manasouza

উত্তর:


151

ইউআরএল-এর পার্স করার একটি সহজ উপায় (এবং যাচাই করতে হবে) হ'ল urlparse( পিওয়াই 2 , পাই 3) ) মডিউল।

একটি রেজেক্স খুব বেশি কাজ।


কোনও "বৈধতা" পদ্ধতি নেই কারণ প্রায় কোনও কিছুই বৈধ URL valid এটিকে বিভক্ত করার জন্য কিছু বিরাম বিধান রয়েছে। কোনও বিরামচিহ্ন অনুপস্থিত, আপনার এখনও একটি বৈধ URL আছে।

আরএফসি সাবধানে দেখুন এবং দেখুন যে আপনি একটি "অবৈধ" ইউআরএল তৈরি করতে পারেন। নিয়মগুলি খুব নমনীয়।

উদাহরণস্বরূপ :::::একটি বৈধ ইউআরএল। পথটি ":::::"। একটি দুর্দান্ত বোকামি ফাইল নাম, তবে একটি বৈধ ফাইলের নাম।

এছাড়াও, /////একটি বৈধ ইউআরএল। নেটলোক ("হোস্টনাম") ""। পথটি "///"। আবার, বোকা। বৈধ। এই ইউআরএলটি স্বাভাবিক করে তোলে"///" সমতুল্য যা করে তোলে।

এর মতো "bad://///worse/////"কিছু পুরোপুরি বৈধ। বোবা তবে বৈধ।

নীচে লাইন । এটি বিশ্লেষণ করুন এবং টুকরাগুলি দেখুন যে তারা কোনওভাবে অপ্রসন্ন হচ্ছে কিনা।

আপনি কি চান যে এই স্কিমটি সর্বদা "এইচটিপি" হবে? আপনি কি নেটলোকটি সর্বদা "www.somename.somedomain" হতে চান? আপনি কি পথটি ইউনিক্সের মতো দেখতে চান? নাকি জানালার মতো? আপনি কি ক্যোয়ারী স্ট্রিংটি সরাতে চান? নাকি এটি সংরক্ষণ?

এগুলি আরএফসি-দ্বারা নির্দিষ্ট বৈধতা নয়। এগুলি আপনার প্রয়োগের জন্য স্বতন্ত্র বৈধতা।


5
urlparse এ বৈধতা () পদ্ধতিটি কোথায়?
wsorenson

6
প্রশ্ন "এটি বৈধ?" উত্তর দেওয়া সহজ নয় কারণ প্রায় কোনও স্ট্রিংই একটি বৈধ URL। পার্সিংয়ের ফলাফল যদি আপনাকে পছন্দ করে না এমন নেটলক বা পথ দেয় তবে আপনি সেই "অবৈধ" বলতে পারেন।
এস .লট

4
একা একটি রেজেক্স খুব বেশি কাজ হতে পারে তবে কার্যত প্রতিটি ব্যবহারের ক্ষেত্রে urlparseএকটি নির্দিষ্ট মানের বিরুদ্ধে নেটলোক (বা অন্য অংশ) বৈধ করার জন্য রেজেক্সেসের সাহায্যে ব্যবহারের প্রয়োজন হয়।
জোনাথন ভানাসকো 14:48

জোনাথন ঠিক বলেছেন। আমি সম্মত হই যে বৈধতা সহজ নয়, তবে urlparse শূন্য বৈধতা দেয়। এখানে অনেকগুলি অবৈধ স্ট্রিং রয়েছে যা urlpars সুখে পার্স করার ভান করে। যেমন ":::::::::::" যা কোনও ব্রাউজার প্রত্যাখ্যান করবে। ইউআরএল এর কিছু প্রাথমিক প্রয়োজনীয়তা যাচাই করার জন্য অবশ্যই এখানে আরও ভাল কাজ রয়েছে।
সোয়ার্ফ

আমাকে @ স্বয়ার সাথে একমত হতে হবে যেহেতু urlparse({})ইনপুট এমনকি কোনও
স্ট্রিংও

233

একটি ইউআরএল পার্স করার জন্য সম্পূর্ণ রেজিএক্সপেক্স এখানে।

(?:http://(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.
)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)
){3}))(?::(?:\d+))?)(?:/(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F
\d]{2}))|[;:@&=])*)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{
2}))|[;:@&=])*))*)(?:\?(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{
2}))|[;:@&=])*))?)?)|(?:ftp://(?:(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?
:%[a-fA-F\d]{2}))|[;?&=])*)(?::(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-
fA-F\d]{2}))|[;?&=])*))?@)?(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-
)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?
:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?))(?:/(?:(?:(?:(?:[a-zA-Z\d$\-_.+!
*'(),]|(?:%[a-fA-F\d]{2}))|[?:@&=])*)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'()
,]|(?:%[a-fA-F\d]{2}))|[?:@&=])*))*)(?:;type=[AIDaid])?)?)|(?:news:(?:
(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;/?:&=])+@(?:(?:(
?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[
a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3})))|(?:[a-zA-Z](
?:[a-zA-Z\d]|[_.+-])*)|\*))|(?:nntp://(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[
a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d
])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?)/(?:[a-zA-Z](?:[a-zA-Z
\d]|[_.+-])*)(?:/(?:\d+))?)|(?:telnet://(?:(?:(?:(?:(?:[a-zA-Z\d$\-_.+
!*'(),]|(?:%[a-fA-F\d]{2}))|[;?&=])*)(?::(?:(?:(?:[a-zA-Z\d$\-_.+!*'()
,]|(?:%[a-fA-F\d]{2}))|[;?&=])*))?@)?(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a
-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d]
)?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?))/?)|(?:gopher://(?:(?:
(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:
(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+
))?)(?:/(?:[a-zA-Z\d$\-_.+!*'(),;/?:@&=]|(?:%[a-fA-F\d]{2}))(?:(?:(?:[
a-zA-Z\d$\-_.+!*'(),;/?:@&=]|(?:%[a-fA-F\d]{2}))*)(?:%09(?:(?:(?:[a-zA
-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;:@&=])*)(?:%09(?:(?:[a-zA-Z\d$
\-_.+!*'(),;/?:@&=]|(?:%[a-fA-F\d]{2}))*))?)?)?)?)|(?:wais://(?:(?:(?:
(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:
[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?
)/(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))*)(?:(?:/(?:(?:[a-zA
-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))*)/(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(
?:%[a-fA-F\d]{2}))*))|\?(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]
{2}))|[;:@&=])*))?)|(?:mailto:(?:(?:[a-zA-Z\d$\-_.+!*'(),;/?:@&=]|(?:%
[a-fA-F\d]{2}))+))|(?:file://(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]
|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:
(?:\d+)(?:\.(?:\d+)){3}))|localhost)?/(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'()
,]|(?:%[a-fA-F\d]{2}))|[?:@&=])*)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(
?:%[a-fA-F\d]{2}))|[?:@&=])*))*))|(?:prospero://(?:(?:(?:(?:(?:[a-zA-Z
\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)
*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?)/(?:(?:(?:(?
:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[?:@&=])*)(?:/(?:(?:(?:[a-
zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[?:@&=])*))*)(?:(?:;(?:(?:(?:[
a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[?:@&])*)=(?:(?:(?:[a-zA-Z\d
$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[?:@&])*)))*)|(?:ldap://(?:(?:(?:(?:
(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?:
[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))?
))?/(?:(?:(?:(?:(?:(?:(?:[a-zA-Z\d]|%(?:3\d|[46][a-fA-F\d]|[57][Aa\d])
)|(?:%20))+|(?:OID|oid)\.(?:(?:\d+)(?:\.(?:\d+))*))(?:(?:%0[Aa])?(?:%2
0)*)=(?:(?:%0[Aa])?(?:%20)*))?(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F
\d]{2}))*))(?:(?:(?:%0[Aa])?(?:%20)*)\+(?:(?:%0[Aa])?(?:%20)*)(?:(?:(?
:(?:(?:[a-zA-Z\d]|%(?:3\d|[46][a-fA-F\d]|[57][Aa\d]))|(?:%20))+|(?:OID
|oid)\.(?:(?:\d+)(?:\.(?:\d+))*))(?:(?:%0[Aa])?(?:%20)*)=(?:(?:%0[Aa])
?(?:%20)*))?(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))*)))*)(?:(
?:(?:(?:%0[Aa])?(?:%20)*)(?:[;,])(?:(?:%0[Aa])?(?:%20)*))(?:(?:(?:(?:(
?:(?:[a-zA-Z\d]|%(?:3\d|[46][a-fA-F\d]|[57][Aa\d]))|(?:%20))+|(?:OID|o
id)\.(?:(?:\d+)(?:\.(?:\d+))*))(?:(?:%0[Aa])?(?:%20)*)=(?:(?:%0[Aa])?(
?:%20)*))?(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))*))(?:(?:(?:
%0[Aa])?(?:%20)*)\+(?:(?:%0[Aa])?(?:%20)*)(?:(?:(?:(?:(?:[a-zA-Z\d]|%(
?:3\d|[46][a-fA-F\d]|[57][Aa\d]))|(?:%20))+|(?:OID|oid)\.(?:(?:\d+)(?:
\.(?:\d+))*))(?:(?:%0[Aa])?(?:%20)*)=(?:(?:%0[Aa])?(?:%20)*))?(?:(?:[a
-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))*)))*))*(?:(?:(?:%0[Aa])?(?:%2
0)*)(?:[;,])(?:(?:%0[Aa])?(?:%20)*))?)(?:\?(?:(?:(?:(?:[a-zA-Z\d$\-_.+
!*'(),]|(?:%[a-fA-F\d]{2}))+)(?:,(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-f
A-F\d]{2}))+))*)?)(?:\?(?:base|one|sub)(?:\?(?:((?:[a-zA-Z\d$\-_.+!*'(
),;/?:@&=]|(?:%[a-fA-F\d]{2}))+)))?)?)?)|(?:(?:z39\.50[rs])://(?:(?:(?
:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?)\.)*(?:[a-zA-Z](?:(?
:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:\d+)){3}))(?::(?:\d+))
?)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))+)(?:\+(?:(?:
[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))+))*(?:\?(?:(?:[a-zA-Z\d$\-_
.+!*'(),]|(?:%[a-fA-F\d]{2}))+))?)?(?:;esn=(?:(?:[a-zA-Z\d$\-_.+!*'(),
]|(?:%[a-fA-F\d]{2}))+))?(?:;rs=(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA
-F\d]{2}))+)(?:\+(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))+))*)
?))|(?:cid:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;?:@&=
])*))|(?:mid:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;?:@
&=])*)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[;?:@&=]
)*))?)|(?:vemmi://(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z
\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\
.(?:\d+)){3}))(?::(?:\d+))?)(?:/(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a
-fA-F\d]{2}))|[/?:@&=])*)(?:(?:;(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a
-fA-F\d]{2}))|[/?:@&])*)=(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d
]{2}))|[/?:@&])*))*))?)|(?:imap://(?:(?:(?:(?:(?:(?:(?:[a-zA-Z\d$\-_.+
!*'(),]|(?:%[a-fA-F\d]{2}))|[&=~])+)(?:(?:;[Aa][Uu][Tt][Hh]=(?:\*|(?:(
?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[&=~])+))))?)|(?:(?:;[
Aa][Uu][Tt][Hh]=(?:\*|(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2
}))|[&=~])+)))(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[
&=~])+))?))@)?(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])
?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:\.(?:
\d+)){3}))(?::(?:\d+))?))/(?:(?:(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:
%[a-fA-F\d]{2}))|[&=~:@/])+)?;[Tt][Yy][Pp][Ee]=(?:[Ll](?:[Ii][Ss][Tt]|
[Ss][Uu][Bb])))|(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))
|[&=~:@/])+)(?:\?(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[
&=~:@/])+))?(?:(?:;[Uu][Ii][Dd][Vv][Aa][Ll][Ii][Dd][Ii][Tt][Yy]=(?:[1-
9]\d*)))?)|(?:(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[&=~
:@/])+)(?:(?:;[Uu][Ii][Dd][Vv][Aa][Ll][Ii][Dd][Ii][Tt][Yy]=(?:[1-9]\d*
)))?(?:/;[Uu][Ii][Dd]=(?:[1-9]\d*))(?:(?:/;[Ss][Ee][Cc][Tt][Ii][Oo][Nn
]=(?:(?:(?:[a-zA-Z\d$\-_.+!*'(),]|(?:%[a-fA-F\d]{2}))|[&=~:@/])+)))?))
)?)|(?:nfs:(?:(?://(?:(?:(?:(?:(?:[a-zA-Z\d](?:(?:[a-zA-Z\d]|-)*[a-zA-
Z\d])?)\.)*(?:[a-zA-Z](?:(?:[a-zA-Z\d]|-)*[a-zA-Z\d])?))|(?:(?:\d+)(?:
\.(?:\d+)){3}))(?::(?:\d+))?)(?:(?:/(?:(?:(?:(?:(?:[a-zA-Z\d\$\-_.!~*'
(),])|(?:%[a-fA-F\d]{2})|[:@&=+])*)(?:/(?:(?:(?:[a-zA-Z\d\$\-_.!~*'(),
])|(?:%[a-fA-F\d]{2})|[:@&=+])*))*)?)))?)|(?:/(?:(?:(?:(?:(?:[a-zA-Z\d
\$\-_.!~*'(),])|(?:%[a-fA-F\d]{2})|[:@&=+])*)(?:/(?:(?:(?:[a-zA-Z\d\$\
-_.!~*'(),])|(?:%[a-fA-F\d]{2})|[:@&=+])*))*)?))|(?:(?:(?:(?:(?:[a-zA-
Z\d\$\-_.!~*'(),])|(?:%[a-fA-F\d]{2})|[:@&=+])*)(?:/(?:(?:(?:[a-zA-Z\d
\$\-_.!~*'(),])|(?:%[a-fA-F\d]{2})|[:@&=+])*))*)?)))

এর জটিলতা দেওয়া, আমি মনে করি আপনার urlparse পথে যাওয়া উচিত।

সম্পূর্ণতার জন্য, এখানে উপরের রেজেক্সের সিউডো-বিএনএফ (একটি ডকুমেন্টেশন হিসাবে):

; একটি URL এর জেনেরিক ফর্মটি হ'ল:

জেনেরিক্রেল = স্কিম ":" স্কিম পার্ট

; নির্দিষ্ট পূর্বনির্ধারিত স্কিমগুলি এখানে সংজ্ঞায়িত করা হয়েছে; নতুন প্রকল্প
; আইএএনএ-এর সাথে নিবন্ধিত হতে পারে

url = httpurl | ftpurl | নিউজআরল |
                 nntpurl | telneturl | gopherurl |
                 waisurl | mailtourl | ফাইলআরল |
                 সমৃদ্ধ | otherurl

; নতুন স্কিমগুলি সাধারণ বাক্য গঠন অনুসরণ করে
otherurl = জেনেরিক্লল

; এই প্রকল্পটি নিম্ন ক্ষেত্রে রয়েছে; দোভাষীদের কেস-উপেক্ষা করা উচিত
স্কিম = 1 * [লোয়ালফা | সংখ্যা | "+" | "-" | " ]
স্কিমপার্ট = * এক্সচার | আইপি-স্কিম্পার্ট


; আইপি ভিত্তিক প্রোটোকলের জন্য ইউআরএল স্কিম অংশগুলি:

ip-યોજનાপাট = "//" লগইন ["/" urlpath]

লগইন = [ব্যবহারকারী [":" পাসওয়ার্ড] "@"] হোস্টপোর্ট
হোস্টপোর্ট = হোস্ট [":" পোর্ট]
হোস্ট = হোস্টনাম | হোস্টনম্বার
হোস্টনাম = * [ডোমেইনবেল "" " ] টপলেবল
ডোমেনবেল = বর্ণমালা | বর্ণমালা * [বর্ণমালা | "-"] বর্ণমালা
toplabel = আলফা | alpha * [বর্ণমালা | "-"] বর্ণমালা
alphadigit = আলফা | অঙ্ক
হোস্টনম্বার = সংখ্যা ""। সংখ্যা "।" সংখ্যা "। সংখ্যা
পোর্ট = সংখ্যা
ব্যবহারকারী = * [উচর | " | "?" | "&" | "="]
পাসওয়ার্ড = * [উচর | " | "?" | "&" | "="]
urlpath = * xchar; প্রোটোকল উপর নির্ভর করে দেখুন বিভাগ 3.1 দেখুন

; পূর্বনির্ধারিত স্কিমগুলি:

; এফটিপি (আরএফসি 959 দেখুন)

ftpurl = "ftp: //" login ["/" fpath ["; টাইপ =" ftptype]]
fpath = টিস্যুতে * ["/" টিস্যু]
fseament = * [উচর | "?" | ":" | "@" | "&" | "="]
ftptype = "এ" | "আমি" | "ডি" | "এ" | "আমি" | "ডি"

; ফাইল

fileurl = "file: //" [হোস্ট | "লোকালহোস্ট"] "/" এফপ্যাথ

; এইচটিটিপি

httpurl = "http: //" হোস্টপোর্ট ["/" এইচপথ ["?" অনুসন্ধান]]
এইচপিথ = hsement * ["/" hsement]
hsement = * [উচর | " | ":" | "@" | "&" | "="]
অনুসন্ধান = * [উচর | " | ":" | "@" | "&" | "="]

; গোফার (আরএফসি 1436 এও দেখুন)

gopherurl = "গোফার: //" হোস্টপোর্ট [/ [gtype [নির্বাচক)
                 ["% 09" অনুসন্ধান ["% 09" গোফার + _ স্ট্রিং]]]]
gtype = xchar
নির্বাচক = * xchar
গোফার + _ স্ট্রিং = * এক্সচার

; মেল্টো (এছাড়াও দেখুন আরএফসি 822)

mailtourl = "mailto:" encoded822addr
এনকোডড 822 এডিডিআর = 1 * এক্সচার; আরএফসি 822-এ আরও সংজ্ঞায়িত করা হয়েছে

; নিউজ (আরএফসি 1036 এও দেখুন)

নিউজুরল = "নিউজ:" গ্রেপ্পার্ট
গ্রেপ্পার্ট = "*" | গ্রুপ | নিবন্ধ
গ্রুপ = আলফা * [আলফা | সংখ্যা | "-" | " | "+" | "_"]
নিবন্ধ = 1 * [উচর | " | "/" | "?" | ":" | "&" | "="] "@" হোস্ট

; এনএনটিপি (আরএফসি 977 দেখুন)

nntpurl = "এনএনটিপি: //" হোস্টপোর্ট "/" গ্রুপ ["/" সংখ্যা]

; টেলনেট

telneturl = "টেলনেট: //" লগইন ["/"]

; WAIS (আরএফসি 1625 দেখুন)

waisurl = ওয়েইসডেটাবেস | waisindex | waisdoc
ওয়েইসডাটাবেস = "ওয়েইস: //" হোস্টপোর্ট "/" ডাটাবেস
waisindex = "ওয়েস: //" হোস্টপোর্ট "/" ডাটাবেস "?" অনুসন্ধান
waisdoc = "ওয়েস: //" হোস্টপোর্ট "/" ডাটাবেস "/" wtype "/" wpath
ডাটাবেস = * উচার
wtype = * uchar
wpath = * উচর

; প্রোপারো

সমৃদ্ধি = "সমৃদ্ধি: //" হোস্টপোর্ট "/" পিপাথ * [ফিল্ডস্পেক]
ppath = pseament * ["/" pseament]
pseament = * [উচর | "?" | ":" | "@" | "&" | "="]
ফিল্ডস্পেক = ";" ক্ষেত্রের নাম "=" ক্ষেত্রের মান
ক্ষেত্রের নাম = * [উচর | "?" | ":" | "@" | "এবং"]
মাঠের মান = * [উচর | "?" | ":" | "@" | "এবং"]

; বিবিধ সংজ্ঞা

lowalpha = "ক" | "খ" | "সি" | "ডি" | "ই" | "চ" | "ছ" | "এইচ" |
                 "আমি" | "জে" | "কে" | "l" | "এম" | "এন" | "ও" | "পি" |
                 "কিউ" | "আর" | "এস" | "টি" | "ইউ" | "ভি" | "ডাব্লু" | "এক্স" |
                 "y" | "জেড"
hialpha = "এ" | "বি" | "সি" | "ডি" | "ই" | "এফ" | "জি" | "এইচ" | "আমি" |
                 "জে" | "কে" | "এল" | "এম" | "এন" | "ও" | "পি" | "প্রশ্ন" | "আর" |
                 "এস" | "টি" | "ইউ" | "ভি" | "ডাব্লু" | "এক্স" | "ওয়াই" | "জেড"
alpha = lowalpha | হিয়ালফা
সংখ্যা = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" |
                 "8" | "9"
নিরাপদ = "$" | "-" | "_" | " | "+"
অতিরিক্ত = "!" | "*" | "'" | "(" | ")" | ","
জাতীয় = "{" | "}" | "|" | "\" | "^" | "~" | "[" | "]" | "` "
বিরামচিহ্ন = "" | | "#" | "%" |


সংরক্ষিত = ";" | "/" | "?" | ":" | "@" | "&" | "="
hex = ডিজিট | "এ" | "বি" | "সি" | "ডি" | "ই" | "এফ" |
                 "এ" | "খ" | "সি" | "ডি" | "ই" | "চ"
পলায়ন = "%" হেক্স হেক্স

unremitted = আলফা | সংখ্যা | নিরাপদ | অতিরিক্ত
uchar = অপরিশোধিত | পালানো
xchar = অরক্ষিত | সংরক্ষিত | পালানো
সংখ্যা = 1 * সংখ্যা

26
অসাধারণ. অসাধারণ. অসাধারণ.
ফ্রাঞ্জ

57
এই নিয়মিত প্রকাশটি স্ক্রিপ্ট দ্বারা উত্পাদিত হয়েছিল বা এটি আসলে হাতে লেখা হয়েছিল?
অউফউইন্ড

21
দেখে মনে হচ্ছে জ্যাকসন পোলক নিয়মিত ভাব প্রকাশ করলে তিনি কী করবেন do দুর্দান্ততার জন্য +1
দমন করুন

10
এই রেজিপ্যাক্সের মূল উত্সটি কী ছিল?
এমভিসিএইচআর

4
আমি এই কোডটি https- র জন্য sertedোকিয়েছি এবং এটি আমার জন্য কাজ করে, | (?: https: // (?: (?: (?? ((??: (?: [a: zA-Z Z \ d]): ?(?:?? [a-zA-Z \ d] | -) * [a-zA-Z \ d])?) \।) * (?: [a-zA-Z] (?: (?: [a-zA- জেড \ d] | -) * [a-zA-Z \ d])?)) | (?: (?? (?: (: D +)) (?: \। (?: \ D +)) {3})) (? :: (?: (: d +))?) (?: / (?: (?: (?: (??: [a-zA-Z \ d $ \ - ।?! +! *? :% [a-fA-F \ d] {2})) | [[:: & & =]) *) (?: / /?: (?: (?? [a-zA-Z \ d $ \ - । +! * '(),] | ((?:% [a-fA-F \ d] {2})) | [[:: & & =]) *)) *) (?: \? (?? : (?: (?: [a-zA-Z \ d $ \ -_। +! * '(),] | (?:% [a-fA-F \ d] {2}))) [[; : @ & =]) *))?)?)
আইসবার্গ

25

আমি জাঙ্গো দ্বারা ব্যবহৃত একটি ব্যবহার করছি এবং এটি বেশ ভালভাবে কাজ করছে বলে মনে হচ্ছে:

def is_valid_url(url):
    import re
    regex = re.compile(
        r'^https?://'  # http:// or https://
        r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+[A-Z]{2,6}\.?|'  # domain...
        r'localhost|'  # localhost...
        r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})' # ...or ip
        r'(?::\d+)?'  # optional port
        r'(?:/?|[/?]\S+)$', re.IGNORECASE)
    return url is not None and regex.search(url)

আপনি সর্বদা এখানে সর্বশেষতম সংস্করণটি চেক করতে পারেন: https://github.com/django/django/blob/master/django/core/omotators.py#L74


4
যখন ইউআরএল খালি স্ট্রিং থাকে, তখন এটি মিথ্যা
পেগাসাস

এটি স্বতঃসিদ্ধ হিসাবে ডোমেন হিসাবে অটোবাহন.সিকিউরিটির ফলস্বরূপ । যদিও এটি পুরোপুরি বৈধ।
संकल्प সিংহ

21

আমি স্বীকার করি, আপনার নিয়মিত অভিব্যক্তিটি সম্পূর্ণ বোধগম্য বলে মনে করি। আমি ভাবছি আপনি যদি এর পরিবর্তে urlparse ব্যবহার করতে পারেন? কিছুটা এইরকম:

pieces = urlparse.urlparse(url)
assert all([pieces.scheme, pieces.netloc])
assert set(pieces.netloc) <= set(string.letters + string.digits + '-.')  # and others?
assert pieces.scheme in ['http', 'https', 'ftp']  # etc.

এটা তোলে ধীর হতে পারে, এবং হয়ত আপনি অবস্থার মিস করব, কিন্তু এটা (রা) আমাকে বলে মনে হয় অনেক সহজ পড়া এবং তুলনায় ডিবাগ করার URL গুলির জন্য একটি রেগুলার এক্সপ্রেশন


4
জেফের এটির প্রয়াসের কোডিংহরর নিবন্ধের জন্য +1। আমি একটি বৈধ ইমেল ঠিকানা যাচাই করার জন্য রেজেক্সকে উদ্ধৃত করতে যাচ্ছিলাম, তবে 4 কে + অক্ষর এই বাক্সে খাপ খায় না। এই জিনিসগুলি করা খুব কঠিন এবং আপনি যখন কিছু প্রার্থীর পাঠ্যদানের জন্য এটি সরবরাহ করতে চান তবে সর্বোত্তম উত্তর সম্ভবত ডেডিকেটেড পার্সার।
আরবার্তেগ

Urlparse মডিউলটি বৈধতার জন্য কিছুটা উদার বলে মনে হচ্ছে (ইনপুট গ্রহণ করার জন্য এবং এটি স্বাভাবিক করার জন্য এটি নিখুঁত হবে)। এটি " অকার্যকর ---- " এর মতো জিনিস গ্রহণ করে - যা আমি প্রায় নিশ্চিত একটি অবৈধ ইউআরএল (?)
ডিবিআর

4
@ ডিবিআর: সে কারণেই আমি আমার কোডের নমুনায় যুক্তিযুক্ত বিবৃতি যুক্ত করেছি। আমি যেমন বলেছিলাম, "আপনি শর্তগুলি মিস করবেন", তবে এটি নিয়মিত প্রকাশের সাথেও ঘটতে পারে এবং কমপক্ষে এইভাবে আপনি সহজেই বলতে পারবেন যে আপনি কী এবং যা পরীক্ষা করছেন না।
জন ফুহী

4
@ ডিবিআর: আপনার মন্তব্যটি দেখতে আমি মজার বোধ করি যেহেতু এসও এটিও গ্রহণ করেছে :)
এসটেবান কাবার ১১'১০

urlparseমডিউল নাম পালটে করা হয় urllib.parseপাইথন 3. চেক docs.python.org/3.7/library/...
manasouza

7

আজকাল, 90% ক্ষেত্রে যদি আপনি পাইথনে ইউআরএল নিয়ে কাজ করেন তবে আপনি সম্ভবত পাইথন-অনুরোধগুলি ব্যবহার করেন। সুতরাং এখানে প্রশ্ন - কেন অনুরোধগুলি থেকে URL বৈধতা পুনরায় ব্যবহার করবেন না?

from requests.models import PreparedRequest
import requests.exceptions


def check_url(url):
    prepared_request = PreparedRequest()
    try:
        prepared_request.prepare_url(url, None)
        return prepared_request.url
    except requests.exceptions.MissingSchema, e:
        raise SomeException

বৈশিষ্ট্য:

  • চাকা পুনরুদ্ধার করবেন না
  • DRY
  • অফলাইনে কাজ করুন
  • ন্যূনতম সংস্থান

6

urlparseবেশ আনন্দের সাথে অবৈধ ইউআরএল নেয়, এটি কোনও ধরণের বৈধকারীর চেয়ে স্ট্রিং-বিভাজক লাইব্রেরি। উদাহরণ স্বরূপ:

from urlparse import urlparse
urlparse('http://----')
# returns: ParseResult(scheme='http', netloc='----', path='', params='', query='', fragment='')

পরিস্থিতির উপর নির্ভর করে, এটি ঠিক আছে ..

আপনি যদি বেশিরভাগ ডেটাতে বিশ্বাস করেন এবং প্রোটোকলটি HTTP হ'ল যাচাই করতে চান তবে urlparseসঠিক।

আপনি যদি URL টি বাস্তবে একটি আইনী URL করতে চান তবে হাস্যকর রেজেক্স ব্যবহার করুন

আপনি যদি এটি নিশ্চিত করতে চান যে এটি একটি আসল ওয়েব ঠিকানা,

import urllib
try:
    urllib.urlopen(url)
except IOError:
    print "Not a real URL"

4
এর, এর সাথে কি হয়েছে "http://----"?? এটি একটি পুরোপুরি বৈধ url! কেবলমাত্র আপনার হোস্টনামটি "----" এ সেট করুন এবং আপনি এটি ইতিমধ্যে ব্যবহার করতে পারেন!
nosklo

@nosklo আমি যদি অশুদ্ধ পাঠ করছি, হোস্ট-নেম hypens, দিয়ে শুরু হতে পারে en.wikipedia.org/wiki/...
dbr

6

http://pypi.python.org/pypi/rfc3987 আরএফসি 3986 এবং আরএফসি 3987 (এটি কোনও স্কিম-সুনির্দিষ্ট বিধিগুলির সাথে নয়) এর নিয়মগুলির সাথে ধারাবাহিকতার জন্য নিয়মিত অভিব্যক্তি দেয়।

আইআরআই_রিফারেন্সের জন্য একটি রেজিপ্সপ হল:

(?P<scheme>[a-zA-Z][a-zA-Z0-9+.-]*):(?://(?P<iauthority>(?:(?P<iuserinfo>(?:(?:[
a-zA-Z0-9._~-]|[\xa0-\ud7ff\uf900-\ufdcf\ufdf0-\uffef\U00010000-\U0001fffd\U0002
0000-\U0002fffd\U00030000-\U0003fffd\U00040000-\U0004fffd\U00050000-\U0005fffd\U
00060000-\U0006fffd\U00070000-\U0007fffd\U00080000-\U0008fffd\U00090000-\U0009ff
fd\U000a0000-\U000afffd\U000b0000-\U000bfffd\U000c0000-\U000cfffd\U000d0000-\U00
0dfffd\U000e1000-\U000efffd])|%[0-9A-F][0-9A-F]|[!$&'()*+,;=]|:)*)@)?(?P<ihost>\
\[(?:(?:[0-9A-F]{1,4}:){6}(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}|(?:(?:(?:25[0-5]|2[0-4]
[0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))|::(?:[0
-9A-F]{1,4}:){5}(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}|(?:(?:(?:25[0-5]|2[0-4][0-9]|[01]
?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))|[0-9A-F]{1,4}?::(
?:[0-9A-F]{1,4}:){4}(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}|(?:(?:(?:25[0-5]|2[0-4][0-9]|
[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))|(?:(?:[0-9A-F
]{1,4}:)?[0-9A-F]{1,4})?::(?:[0-9A-F]{1,4}:){3}(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}|(?
:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[
0-9][0-9]?)))|(?:(?:[0-9A-F]{1,4}:){,2}[0-9A-F]{1,4})?::(?:[0-9A-F]{1,4}:){2}(?:
[0-9A-F]{1,4}:[0-9A-F]{1,4}|(?:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3
}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))|(?:(?:[0-9A-F]{1,4}:){,3}[0-9A-F]{1,
4})?::(?:[0-9A-F]{1,4}:)(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}|(?:(?:(?:25[0-5]|2[0-4][0
-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))|(?:(?:[0-
9A-F]{1,4}:){,4}[0-9A-F]{1,4})?::(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}|(?:(?:(?:25[0-5]
|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))|
(?:(?:[0-9A-F]{1,4}:){,5}[0-9A-F]{1,4})?::[0-9A-F]{1,4}|(?:(?:[0-9A-F]{1,4}:){,6
}[0-9A-F]{1,4})?::|v[0-9A-F]+\\.(?:[a-zA-Z0-9_.~-]|[!$&'()*+,;=]|:)+)\\]|(?:(?:(
?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][
0-9]?))|(?:(?:[a-zA-Z0-9._~-]|[\xa0-\ud7ff\uf900-\ufdcf\ufdf0-\uffef\U00010000-\
U0001fffd\U00020000-\U0002fffd\U00030000-\U0003fffd\U00040000-\U0004fffd\U000500
00-\U0005fffd\U00060000-\U0006fffd\U00070000-\U0007fffd\U00080000-\U0008fffd\U00
090000-\U0009fffd\U000a0000-\U000afffd\U000b0000-\U000bfffd\U000c0000-\U000cfffd
\U000d0000-\U000dfffd\U000e1000-\U000efffd])|%[0-9A-F][0-9A-F]|[!$&'()*+,;=])*)(
?::(?P<port>[0-9]*))?)(?P<ipath>(?:/(?:(?:[a-zA-Z0-9._~-]|[\xa0-\ud7ff\uf900-\uf
dcf\ufdf0-\uffef\U00010000-\U0001fffd\U00020000-\U0002fffd\U00030000-\U0003fffd\
U00040000-\U0004fffd\U00050000-\U0005fffd\U00060000-\U0006fffd\U00070000-\U0007f
ffd\U00080000-\U0008fffd\U00090000-\U0009fffd\U000a0000-\U000afffd\U000b0000-\U0
00bfffd\U000c0000-\U000cfffd\U000d0000-\U000dfffd\U000e1000-\U000efffd])|%[0-9A-
F][0-9A-F]|[!$&'()*+,;=]|:|@)*)*)|(?P<ipath>/(?:(?:(?:[a-zA-Z0-9._~-]|[\xa0-\ud7
ff\uf900-\ufdcf\ufdf0-\uffef\U00010000-\U0001fffd\U00020000-\U0002fffd\U00030000
-\U0003fffd\U00040000-\U0004fffd\U00050000-\U0005fffd\U00060000-\U0006fffd\U0007
0000-\U0007fffd\U00080000-\U0008fffd\U00090000-\U0009fffd\U000a0000-\U000afffd\U
000b0000-\U000bfffd\U000c0000-\U000cfffd\U000d0000-\U000dfffd\U000e1000-\U000eff
fd])|%[0-9A-F][0-9A-F]|[!$&'()*+,;=]|:|@)+(?:/(?:(?:[a-zA-Z0-9._~-]|[\xa0-\ud7ff
\uf900-\ufdcf\ufdf0-\uffef\U00010000-\U0001fffd\U00020000-\U0002fffd\U00030000-\
U0003fffd\U00040000-\U0004fffd\U00050000-\U0005fffd\U00060000-\U0006fffd\U000700
00-\U0007fffd\U00080000-\U0008fffd\U00090000-\U0009fffd\U000a0000-\U000afffd\U00
0b0000-\U000bfffd\U000c0000-\U000cfffd\U000d0000-\U000dfffd\U000e1000-\U000efffd
])|%[0-9A-F][0-9A-F]|[!$&'()*+,;=]|:|@)*)*)?)|(?P<ipath>(?:(?:[a-zA-Z0-9._~-]|[\
xa0-\ud7ff\uf900-\ufdcf\ufdf0-\uffef\U00010000-\U0001fffd\U00020000-\U0002fffd\U
00030000-\U0003fffd\U00040000-\U0004fffd\U00050000-\U0005fffd\U00060000-\U0006ff
fd\U00070000-\U0007fffd\U00080000-\U0008fffd\U00090000-\U0009fffd\U000a0000-\U00
0afffd\U000b0000-\U000bfffd\U000c0000-\U000cfffd\U000d0000-\U000dfffd\U000e1000-
\U000efffd])|%[0-9A-F][0-9A-F]|[!$&'()*+,;=]|:|@)+(?:/(?:(?:[a-zA-Z0-9._~-]|[\xa
0-\ud7ff\uf900-\ufdcf\ufdf0-\uffef\U00010000-\U0001fffd\U00020000-\U0002fffd\U00
030000-\U0003fffd\U00040000-\U0004fffd\U00050000-\U0005fffd\U00060000-\U0006fffd
\U00070000-\U0007fffd\U00080000-\U0008fffd\U00090000-\U0009fffd\U000a0000-\U000a
fffd\U000b0000-\U000bfffd\U000c0000-\U000cfffd\U000d0000-\U000dfffd\U000e1000-\U
000efffd])|%[0-9A-F][0-9A-F]|[!$&'()*+,;=]|:|@)*)*)|(?P<ipath>))(?:\\?(?P<iquery
>(?:(?:(?:[a-zA-Z0-9._~-]|[\xa0-\ud7ff\uf900-\ufdcf\ufdf0-\uffef\U00010000-\U000
1fffd\U00020000-\U0002fffd\U00030000-\U0003fffd\U00040000-\U0004fffd\U00050000-\
U0005fffd\U00060000-\U0006fffd\U00070000-\U0007fffd\U00080000-\U0008fffd\U000900
00-\U0009fffd\U000a0000-\U000afffd\U000b0000-\U000bfffd\U000c0000-\U000cfffd\U00
0d0000-\U000dfffd\U000e1000-\U000efffd])|%[0-9A-F][0-9A-F]|[!$&'()*+,;=]|:|@)|[\
ue000-\uf8ff\U000f0000-\U000ffffd\U00100000-\U0010fffd]|/|\\?)*))?(?:\\#(?P<ifra
gment>(?:(?:(?:[a-zA-Z0-9._~-]|[\xa0-\ud7ff\uf900-\ufdcf\ufdf0-\uffef\U00010000-
\U0001fffd\U00020000-\U0002fffd\U00030000-\U0003fffd\U00040000-\U0004fffd\U00050
000-\U0005fffd\U00060000-\U0006fffd\U00070000-\U0007fffd\U00080000-\U0008fffd\U0
0090000-\U0009fffd\U000a0000-\U000afffd\U000b0000-\U000bfffd\U000c0000-\U000cfff
d\U000d0000-\U000dfffd\U000e1000-\U000efffd])|%[0-9A-F][0-9A-F]|[!$&'()*+,;=]|:|
@)|/|\\?)*))?|(?:(?://(?P<iauthority>(?:(?P<iuserinfo>(?:(?:[a-zA-Z0-9._~-]|[\xa
0-\ud7ff\uf900-\ufdcf\ufdf0-\uffef\U00010000-\U0001fffd\U00020000-\U0002fffd\U00
030000-\U0003fffd\U00040000-\U0004fffd\U00050000-\U0005fffd\U00060000-\U0006fffd
\U00070000-\U0007fffd\U00080000-\U0008fffd\U00090000-\U0009fffd\U000a0000-\U000a
fffd\U000b0000-\U000bfffd\U000c0000-\U000cfffd\U000d0000-\U000dfffd\U000e1000-\U
000efffd])|%[0-9A-F][0-9A-F]|[!$&'()*+,;=]|:)*)@)?(?P<ihost>\\[(?:(?:[0-9A-F]{1,
4}:){6}(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}|(?:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-
9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))|::(?:[0-9A-F]{1,4}:){5}(?:
[0-9A-F]{1,4}:[0-9A-F]{1,4}|(?:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3
}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))|[0-9A-F]{1,4}?::(?:[0-9A-F]{1,4}:){4
}(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}|(?:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\
.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))|(?:(?:[0-9A-F]{1,4}:)?[0-9A-F]{1
,4})?::(?:[0-9A-F]{1,4}:){3}(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}|(?:(?:(?:25[0-5]|2[0-
4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))|(?:(?
:[0-9A-F]{1,4}:){,2}[0-9A-F]{1,4})?::(?:[0-9A-F]{1,4}:){2}(?:[0-9A-F]{1,4}:[0-9A
-F]{1,4}|(?:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][
0-9]|[01]?[0-9][0-9]?)))|(?:(?:[0-9A-F]{1,4}:){,3}[0-9A-F]{1,4})?::(?:[0-9A-F]{1
,4}:)(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}|(?:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]
?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))|(?:(?:[0-9A-F]{1,4}:){,4}[0-
9A-F]{1,4})?::(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}|(?:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[
0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))|(?:(?:[0-9A-F]{1,4}
:){,5}[0-9A-F]{1,4})?::[0-9A-F]{1,4}|(?:(?:[0-9A-F]{1,4}:){,6}[0-9A-F]{1,4})?::|
v[0-9A-F]+\\.(?:[a-zA-Z0-9_.~-]|[!$&'()*+,;=]|:)+)\\]|(?:(?:(?:25[0-5]|2[0-4][0-
9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))|(?:(?:[a-zA
-Z0-9._~-]|[\xa0-\ud7ff\uf900-\ufdcf\ufdf0-\uffef\U00010000-\U0001fffd\U00020000
-\U0002fffd\U00030000-\U0003fffd\U00040000-\U0004fffd\U00050000-\U0005fffd\U0006
0000-\U0006fffd\U00070000-\U0007fffd\U00080000-\U0008fffd\U00090000-\U0009fffd\U
000a0000-\U000afffd\U000b0000-\U000bfffd\U000c0000-\U000cfffd\U000d0000-\U000dff
fd\U000e1000-\U000efffd])|%[0-9A-F][0-9A-F]|[!$&'()*+,;=])*)(?::(?P<port>[0-9]*)
)?)(?P<ipath>(?:/(?:(?:[a-zA-Z0-9._~-]|[\xa0-\ud7ff\uf900-\ufdcf\ufdf0-\uffef\U0
0010000-\U0001fffd\U00020000-\U0002fffd\U00030000-\U0003fffd\U00040000-\U0004fff
d\U00050000-\U0005fffd\U00060000-\U0006fffd\U00070000-\U0007fffd\U00080000-\U000
8fffd\U00090000-\U0009fffd\U000a0000-\U000afffd\U000b0000-\U000bfffd\U000c0000-\
U000cfffd\U000d0000-\U000dfffd\U000e1000-\U000efffd])|%[0-9A-F][0-9A-F]|[!$&'()*
+,;=]|:|@)*)*)|(?P<ipath>/(?:(?:(?:[a-zA-Z0-9._~-]|[\xa0-\ud7ff\uf900-\ufdcf\ufd
f0-\uffef\U00010000-\U0001fffd\U00020000-\U0002fffd\U00030000-\U0003fffd\U000400
00-\U0004fffd\U00050000-\U0005fffd\U00060000-\U0006fffd\U00070000-\U0007fffd\U00
080000-\U0008fffd\U00090000-\U0009fffd\U000a0000-\U000afffd\U000b0000-\U000bfffd
\U000c0000-\U000cfffd\U000d0000-\U000dfffd\U000e1000-\U000efffd])|%[0-9A-F][0-9A
-F]|[!$&'()*+,;=]|:|@)+(?:/(?:(?:[a-zA-Z0-9._~-]|[\xa0-\ud7ff\uf900-\ufdcf\ufdf0
-\uffef\U00010000-\U0001fffd\U00020000-\U0002fffd\U00030000-\U0003fffd\U00040000
-\U0004fffd\U00050000-\U0005fffd\U00060000-\U0006fffd\U00070000-\U0007fffd\U0008
0000-\U0008fffd\U00090000-\U0009fffd\U000a0000-\U000afffd\U000b0000-\U000bfffd\U
000c0000-\U000cfffd\U000d0000-\U000dfffd\U000e1000-\U000efffd])|%[0-9A-F][0-9A-F
]|[!$&'()*+,;=]|:|@)*)*)?)|(?P<ipath>(?:(?:[a-zA-Z0-9._~-]|[\xa0-\ud7ff\uf900-\u
fdcf\ufdf0-\uffef\U00010000-\U0001fffd\U00020000-\U0002fffd\U00030000-\U0003fffd
\U00040000-\U0004fffd\U00050000-\U0005fffd\U00060000-\U0006fffd\U00070000-\U0007
fffd\U00080000-\U0008fffd\U00090000-\U0009fffd\U000a0000-\U000afffd\U000b0000-\U
000bfffd\U000c0000-\U000cfffd\U000d0000-\U000dfffd\U000e1000-\U000efffd])|%[0-9A
-F][0-9A-F]|[!$&'()*+,;=]|@)+(?:/(?:(?:[a-zA-Z0-9._~-]|[\xa0-\ud7ff\uf900-\ufdcf
\ufdf0-\uffef\U00010000-\U0001fffd\U00020000-\U0002fffd\U00030000-\U0003fffd\U00
040000-\U0004fffd\U00050000-\U0005fffd\U00060000-\U0006fffd\U00070000-\U0007fffd
\U00080000-\U0008fffd\U00090000-\U0009fffd\U000a0000-\U000afffd\U000b0000-\U000b
fffd\U000c0000-\U000cfffd\U000d0000-\U000dfffd\U000e1000-\U000efffd])|%[0-9A-F][
0-9A-F]|[!$&'()*+,;=]|:|@)*)*)|(?P<ipath>))(?:\\?(?P<iquery>(?:(?:(?:[a-zA-Z0-9.
_~-]|[\xa0-\ud7ff\uf900-\ufdcf\ufdf0-\uffef\U00010000-\U0001fffd\U00020000-\U000
2fffd\U00030000-\U0003fffd\U00040000-\U0004fffd\U00050000-\U0005fffd\U00060000-\
U0006fffd\U00070000-\U0007fffd\U00080000-\U0008fffd\U00090000-\U0009fffd\U000a00
00-\U000afffd\U000b0000-\U000bfffd\U000c0000-\U000cfffd\U000d0000-\U000dfffd\U00
0e1000-\U000efffd])|%[0-9A-F][0-9A-F]|[!$&'()*+,;=]|:|@)|[\ue000-\uf8ff\U000f000
0-\U000ffffd\U00100000-\U0010fffd]|/|\\?)*))?(?:\\#(?P<ifragment>(?:(?:(?:[a-zA-
Z0-9._~-]|[\xa0-\ud7ff\uf900-\ufdcf\ufdf0-\uffef\U00010000-\U0001fffd\U00020000-
\U0002fffd\U00030000-\U0003fffd\U00040000-\U0004fffd\U00050000-\U0005fffd\U00060
000-\U0006fffd\U00070000-\U0007fffd\U00080000-\U0008fffd\U00090000-\U0009fffd\U0
00a0000-\U000afffd\U000b0000-\U000bfffd\U000c0000-\U000cfffd\U000d0000-\U000dfff
d\U000e1000-\U000efffd])|%[0-9A-F][0-9A-F]|[!$&'()*+,;=]|:|@)|/|\\?)*))?)

এক লাইনে:

(?P<scheme>[a-zA-Z][a-zA-Z0-9+.-]*):(?://(?P<iauthority>(?:(?P<iuserinfo>(?:(?:[a-zA-Z0-9._~-]|[\xa0-\ud7ff\uf900-\ufdcf\ufdf0-\uffef\U00010000-\U0001fffd\U00020000-\U0002fffd\U00030000-\U0003fffd\U00040000-\U0004fffd\U00050000-\U0005fffd\U00060000-\U0006fffd\U00070000-\U0007fffd\U00080000-\U0008fffd\U00090000-\U0009fffd\U000a0000-\U000afffd\U000b0000-\U000bfffd\U000c0000-\U000cfffd\U000d0000-\U000dfffd\U000e1000-\U000efffd])|%[0-9A-F][0-9A-F]|[!$&'()*+,;=]|:)*)@)?(?P<ihost>\\[(?:(?:[0-9A-F]{1,4}:){6}(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}|(?:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))|::(?:[0-9A-F]{1,4}:){5}(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}|(?:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))|[0-9A-F]{1,4}?::(?:[0-9A-F]{1,4}:){4}(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}|(?:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))|(?:(?:[0-9A-F]{1,4}:)?[0-9A-F]{1,4})?::(?:[0-9A-F]{1,4}:){3}(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}|(?:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))|(?:(?:[0-9A-F]{1,4}:){,2}[0-9A-F]{1,4})?::(?:[0-9A-F]{1,4}:){2}(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}|(?:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))|(?:(?:[0-9A-F]{1,4}:){,3}[0-9A-F]{1,4})?::(?:[0-9A-F]{1,4}:)(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}|(?:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))|(?:(?:[0-9A-F]{1,4}:){,4}[0-9A-F]{1,4})?::(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}|(?:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))|(?:(?:[0-9A-F]{1,4}:){,5}[0-9A-F]{1,4})?::[0-9A-F]{1,4}|(?:(?:[0-9A-F]{1,4}:){,6}[0-9A-F]{1,4})?::|v[0-9A-F]+\\.(?:[a-zA-Z0-9_.~-]|[!$&'()*+,;=]|:)+)\\]|(?:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))|(?:(?:[a-zA-Z0-9._~-]|[\xa0-\ud7ff\uf900-\ufdcf\ufdf0-\uffef\U00010000-\U0001fffd\U00020000-\U0002fffd\U00030000-\U0003fffd\U00040000-\U0004fffd\U00050000-\U0005fffd\U00060000-\U0006fffd\U00070000-\U0007fffd\U00080000-\U0008fffd\U00090000-\U0009fffd\U000a0000-\U000afffd\U000b0000-\U000bfffd\U000c0000-\U000cfffd\U000d0000-\U000dfffd\U000e1000-\U000efffd])|%[0-9A-F][0-9A-F]|[!$&'()*+,;=])*)(?::(?P<port>[0-9]*))?)(?P<ipath>(?:/(?:(?:[a-zA-Z0-9._~-]|[\xa0-\ud7ff\uf900-\ufdcf\ufdf0-\uffef\U00010000-\U0001fffd\U00020000-\U0002fffd\U00030000-\U0003fffd\U00040000-\U0004fffd\U00050000-\U0005fffd\U00060000-\U0006fffd\U00070000-\U0007fffd\U00080000-\U0008fffd\U00090000-\U0009fffd\U000a0000-\U000afffd\U000b0000-\U000bfffd\U000c0000-\U000cfffd\U000d0000-\U000dfffd\U000e1000-\U000efffd])|%[0-9A-F][0-9A-F]|[!$&'()*+,;=]|:|@)*)*)|(?P<ipath>/(?:(?:(?:[a-zA-Z0-9._~-]|[\xa0-\ud7ff\uf900-\ufdcf\ufdf0-\uffef\U00010000-\U0001fffd\U00020000-\U0002fffd\U00030000-\U0003fffd\U00040000-\U0004fffd\U00050000-\U0005fffd\U00060000-\U0006fffd\U00070000-\U0007fffd\U00080000-\U0008fffd\U00090000-\U0009fffd\U000a0000-\U000afffd\U000b0000-\U000bfffd\U000c0000-\U000cfffd\U000d0000-\U000dfffd\U000e1000-\U000efffd])|%[0-9A-F][0-9A-F]|[!$&'()*+,;=]|:|@)+(?:/(?:(?:[a-zA-Z0-9._~-]|[\xa0-\ud7ff\uf900-\ufdcf\ufdf0-\uffef\U00010000-\U0001fffd\U00020000-\U0002fffd\U00030000-\U0003fffd\U00040000-\U0004fffd\U00050000-\U0005fffd\U00060000-\U0006fffd\U00070000-\U0007fffd\U00080000-\U0008fffd\U00090000-\U0009fffd\U000a0000-\U000afffd\U000b0000-\U000bfffd\U000c0000-\U000cfffd\U000d0000-\U000dfffd\U000e1000-\U000efffd])|%[0-9A-F][0-9A-F]|[!$&'()*+,;=]|:|@)*)*)?)|(?P<ipath>(?:(?:[a-zA-Z0-9._~-]|[\xa0-\ud7ff\uf900-\ufdcf\ufdf0-\uffef\U00010000-\U0001fffd\U00020000-\U0002fffd\U00030000-\U0003fffd\U00040000-\U0004fffd\U00050000-\U0005fffd\U00060000-\U0006fffd\U00070000-\U0007fffd\U00080000-\U0008fffd\U00090000-\U0009fffd\U000a0000-\U000afffd\U000b0000-\U000bfffd\U000c0000-\U000cfffd\U000d0000-\U000dfffd\U000e1000-\U000efffd])|%[0-9A-F][0-9A-F]|[!$&'()*+,;=]|:|@)+(?:/(?:(?:[a-zA-Z0-9._~-]|[\xa0-\ud7ff\uf900-\ufdcf\ufdf0-\uffef\U00010000-\U0001fffd\U00020000-\U0002fffd\U00030000-\U0003fffd\U00040000-\U0004fffd\U00050000-\U0005fffd\U00060000-\U0006fffd\U00070000-\U0007fffd\U00080000-\U0008fffd\U00090000-\U0009fffd\U000a0000-\U000afffd\U000b0000-\U000bfffd\U000c0000-\U000cfffd\U000d0000-\U000dfffd\U000e1000-\U000efffd])|%[0-9A-F][0-9A-F]|[!$&'()*+,;=]|:|@)*)*)|(?P<ipath>))(?:\\?(?P<iquery>(?:(?:(?:[a-zA-Z0-9._~-]|[\xa0-\ud7ff\uf900-\ufdcf\ufdf0-\uffef\U00010000-\U0001fffd\U00020000-\U0002fffd\U00030000-\U0003fffd\U00040000-\U0004fffd\U00050000-\U0005fffd\U00060000-\U0006fffd\U00070000-\U0007fffd\U00080000-\U0008fffd\U00090000-\U0009fffd\U000a0000-\U000afffd\U000b0000-\U000bfffd\U000c0000-\U000cfffd\U000d0000-\U000dfffd\U000e1000-\U000efffd])|%[0-9A-F][0-9A-F]|[!$&'()*+,;=]|:|@)|[\ue000-\uf8ff\U000f0000-\U000ffffd\U00100000-\U0010fffd]|/|\\?)*))?(?:\\#(?P<ifragment>(?:(?:(?:[a-zA-Z0-9._~-]|[\xa0-\ud7ff\uf900-\ufdcf\ufdf0-\uffef\U00010000-\U0001fffd\U00020000-\U0002fffd\U00030000-\U0003fffd\U00040000-\U0004fffd\U00050000-\U0005fffd\U00060000-\U0006fffd\U00070000-\U0007fffd\U00080000-\U0008fffd\U00090000-\U0009fffd\U000a0000-\U000afffd\U000b0000-\U000bfffd\U000c0000-\U000cfffd\U000d0000-\U000dfffd\U000e1000-\U000efffd])|%[0-9A-F][0-9A-F]|[!$&'()*+,;=]|:|@)|/|\\?)*))?|(?:(?://(?P<iauthority>(?:(?P<iuserinfo>(?:(?:[a-zA-Z0-9._~-]|[\xa0-\ud7ff\uf900-\ufdcf\ufdf0-\uffef\U00010000-\U0001fffd\U00020000-\U0002fffd\U00030000-\U0003fffd\U00040000-\U0004fffd\U00050000-\U0005fffd\U00060000-\U0006fffd\U00070000-\U0007fffd\U00080000-\U0008fffd\U00090000-\U0009fffd\U000a0000-\U000afffd\U000b0000-\U000bfffd\U000c0000-\U000cfffd\U000d0000-\U000dfffd\U000e1000-\U000efffd])|%[0-9A-F][0-9A-F]|[!$&'()*+,;=]|:)*)@)?(?P<ihost>\\[(?:(?:[0-9A-F]{1,4}:){6}(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}|(?:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))|::(?:[0-9A-F]{1,4}:){5}(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}|(?:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))|[0-9A-F]{1,4}?::(?:[0-9A-F]{1,4}:){4}(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}|(?:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))|(?:(?:[0-9A-F]{1,4}:)?[0-9A-F]{1,4})?::(?:[0-9A-F]{1,4}:){3}(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}|(?:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))|(?:(?:[0-9A-F]{1,4}:){,2}[0-9A-F]{1,4})?::(?:[0-9A-F]{1,4}:){2}(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}|(?:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))|(?:(?:[0-9A-F]{1,4}:){,3}[0-9A-F]{1,4})?::(?:[0-9A-F]{1,4}:)(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}|(?:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))|(?:(?:[0-9A-F]{1,4}:){,4}[0-9A-F]{1,4})?::(?:[0-9A-F]{1,4}:[0-9A-F]{1,4}|(?:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))|(?:(?:[0-9A-F]{1,4}:){,5}[0-9A-F]{1,4})?::[0-9A-F]{1,4}|(?:(?:[0-9A-F]{1,4}:){,6}[0-9A-F]{1,4})?::|v[0-9A-F]+\\.(?:[a-zA-Z0-9_.~-]|[!$&'()*+,;=]|:)+)\\]|(?:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))|(?:(?:[a-zA-Z0-9._~-]|[\xa0-\ud7ff\uf900-\ufdcf\ufdf0-\uffef\U00010000-\U0001fffd\U00020000-\U0002fffd\U00030000-\U0003fffd\U00040000-\U0004fffd\U00050000-\U0005fffd\U00060000-\U0006fffd\U00070000-\U0007fffd\U00080000-\U0008fffd\U00090000-\U0009fffd\U000a0000-\U000afffd\U000b0000-\U000bfffd\U000c0000-\U000cfffd\U000d0000-\U000dfffd\U000e1000-\U000efffd])|%[0-9A-F][0-9A-F]|[!$&'()*+,;=])*)(?::(?P<port>[0-9]*))?)(?P<ipath>(?:/(?:(?:[a-zA-Z0-9._~-]|[\xa0-\ud7ff\uf900-\ufdcf\ufdf0-\uffef\U00010000-\U0001fffd\U00020000-\U0002fffd\U00030000-\U0003fffd\U00040000-\U0004fffd\U00050000-\U0005fffd\U00060000-\U0006fffd\U00070000-\U0007fffd\U00080000-\U0008fffd\U00090000-\U0009fffd\U000a0000-\U000afffd\U000b0000-\U000bfffd\U000c0000-\U000cfffd\U000d0000-\U000dfffd\U000e1000-\U000efffd])|%[0-9A-F][0-9A-F]|[!$&'()*+,;=]|:|@)*)*)|(?P<ipath>/(?:(?:(?:[a-zA-Z0-9._~-]|[\xa0-\ud7ff\uf900-\ufdcf\ufdf0-\uffef\U00010000-\U0001fffd\U00020000-\U0002fffd\U00030000-\U0003fffd\U00040000-\U0004fffd\U00050000-\U0005fffd\U00060000-\U0006fffd\U00070000-\U0007fffd\U00080000-\U0008fffd\U00090000-\U0009fffd\U000a0000-\U000afffd\U000b0000-\U000bfffd\U000c0000-\U000cfffd\U000d0000-\U000dfffd\U000e1000-\U000efffd])|%[0-9A-F][0-9A-F]|[!$&'()*+,;=]|:|@)+(?:/(?:(?:[a-zA-Z0-9._~-]|[\xa0-\ud7ff\uf900-\ufdcf\ufdf0-\uffef\U00010000-\U0001fffd\U00020000-\U0002fffd\U00030000-\U0003fffd\U00040000-\U0004fffd\U00050000-\U0005fffd\U00060000-\U0006fffd\U00070000-\U0007fffd\U00080000-\U0008fffd\U00090000-\U0009fffd\U000a0000-\U000afffd\U000b0000-\U000bfffd\U000c0000-\U000cfffd\U000d0000-\U000dfffd\U000e1000-\U000efffd])|%[0-9A-F][0-9A-F]|[!$&'()*+,;=]|:|@)*)*)?)|(?P<ipath>(?:(?:[a-zA-Z0-9._~-]|[\xa0-\ud7ff\uf900-\ufdcf\ufdf0-\uffef\U00010000-\U0001fffd\U00020000-\U0002fffd\U00030000-\U0003fffd\U00040000-\U0004fffd\U00050000-\U0005fffd\U00060000-\U0006fffd\U00070000-\U0007fffd\U00080000-\U0008fffd\U00090000-\U0009fffd\U000a0000-\U000afffd\U000b0000-\U000bfffd\U000c0000-\U000cfffd\U000d0000-\U000dfffd\U000e1000-\U000efffd])|%[0-9A-F][0-9A-F]|[!$&'()*+,;=]|@)+(?:/(?:(?:[a-zA-Z0-9._~-]|[\xa0-\ud7ff\uf900-\ufdcf\ufdf0-\uffef\U00010000-\U0001fffd\U00020000-\U0002fffd\U00030000-\U0003fffd\U00040000-\U0004fffd\U00050000-\U0005fffd\U00060000-\U0006fffd\U00070000-\U0007fffd\U00080000-\U0008fffd\U00090000-\U0009fffd\U000a0000-\U000afffd\U000b0000-\U000bfffd\U000c0000-\U000cfffd\U000d0000-\U000dfffd\U000e1000-\U000efffd])|%[0-9A-F][0-9A-F]|[!$&'()*+,;=]|:|@)*)*)|(?P<ipath>))(?:\\?(?P<iquery>(?:(?:(?:[a-zA-Z0-9._~-]|[\xa0-\ud7ff\uf900-\ufdcf\ufdf0-\uffef\U00010000-\U0001fffd\U00020000-\U0002fffd\U00030000-\U0003fffd\U00040000-\U0004fffd\U00050000-\U0005fffd\U00060000-\U0006fffd\U00070000-\U0007fffd\U00080000-\U0008fffd\U00090000-\U0009fffd\U000a0000-\U000afffd\U000b0000-\U000bfffd\U000c0000-\U000cfffd\U000d0000-\U000dfffd\U000e1000-\U000efffd])|%[0-9A-F][0-9A-F]|[!$&'()*+,;=]|:|@)|[\ue000-\uf8ff\U000f0000-\U000ffffd\U00100000-\U0010fffd]|/|\\?)*))?(?:\\#(?P<ifragment>(?:(?:(?:[a-zA-Z0-9._~-]|[\xa0-\ud7ff\uf900-\ufdcf\ufdf0-\uffef\U00010000-\U0001fffd\U00020000-\U0002fffd\U00030000-\U0003fffd\U00040000-\U0004fffd\U00050000-\U0005fffd\U00060000-\U0006fffd\U00070000-\U0007fffd\U00080000-\U0008fffd\U00090000-\U0009fffd\U000a0000-\U000afffd\U000b0000-\U000bfffd\U000c0000-\U000cfffd\U000d0000-\U000dfffd\U000e1000-\U000efffd])|%[0-9A-F][0-9A-F]|[!$&'()*+,;=]|:|@)|/|\\?)*))?)

6

বিঃদ্রঃ - Lepl আর রক্ষণাবেক্ষণ বা সমর্থিত নয়।

আরএফসি 3696 ইউআরএল বৈধতার জন্য "সেরা অনুশীলনগুলি" সংজ্ঞায়িত করেছে - http://www.faqs.org/rfcs/rfc3696.html

লেপেলের সর্বশেষ প্রকাশে (পাইথন পার্সার লাইব্রেরি) আরএফসি 3696 এর একটি বাস্তবায়ন অন্তর্ভুক্ত রয়েছে। আপনি এটি কিছু ব্যবহার করতে পারেন:

from lepl.apps.rfc3696 import Email, HttpUrl

# compile the validators (do once at start of program)
valid_email = Email()
valid_http_url = HttpUrl()

# use the validators (as often as you like)
if valid_email(some_email):
    # email is ok
else:
    # email is bad
if valid_http_url(some_url):
    # url is ok
else:
    # url is bad

যদিও বৈধকরণকারীগুলি লেপলে সংজ্ঞায়িত করা হয় যা একটি পুনরাবৃত্ত বংশদ্ভুত পার্সার, তবে তারা নিয়মিত প্রকাশে অভ্যন্তরীণভাবে সংকলিত হয়। এটি উভয় বিশ্বের সেরাগুলির সংমিশ্রণ করেছে - একটি (তুলনামূলকভাবে) সহজ সংজ্ঞা যা আরএফসি 3696 এবং একটি কার্যকর প্রয়োগের বিরুদ্ধে পরীক্ষা করা যেতে পারে । আমার ব্লগে একটি পোস্ট রয়েছে যা দেখায় এটি কীভাবে পার্সারকে সহজতর করে - http://www.acooke.org/cute/LEPLOptimi0.html

লিপল http://www.acooke.org/lepl এ উপলব্ধ এবং আরএফসি 3696 মডিউলটি http://www.acooke.org/lepl/rfc3696.html এ নথিভুক্ত করা হয়েছে

এটি এই রিলিজটিতে সম্পূর্ণ নতুন, যাতে বাগগুলি থাকতে পারে। আপনার যদি কোনও সমস্যা হয় তবে দয়া করে আমার সাথে যোগাযোগ করুন এবং আমি এএসপি তাদের ঠিক করে দেব। ধন্যবাদ


3

প্রদত্ত রেজিএক্স http://www.ietf.org/rfc/rfc3986.txt ফর্মের যে কোনও url এর সাথে মেলে ; অজগর দোভাষীতে পরীক্ষা করা হয়।

ইউআরএলগুলি বিশ্লেষণ করতে আপনার সমস্যা হয়েছে এমন ফর্ম্যাটটি কী ছিল?


1

আমি বছর ধরে এই অনেকবার এবং সবসময় অন্য কারো রেগুলার এক্সপ্রেশন যারা পথ বেশি আমি এটা সম্পর্কে চিন্তা করেনি অনুলিপি শেষ পর্যন্ত করা প্রয়োজন থাকেন চান এটি সম্পর্কে মনে হয়।

এই বলে যে, জাঙ্গো ফর্ম কোডে একটি রেজেেক্স রয়েছে যা কৌশলটি করা উচিত:

http://code.djangoproject.com/browser/django/trunk/django/forms/fields.py#L534


জ্যাঙ্গো URL টি এফটিপি ইত্যাদি হ্যান্ডেল করে না বলে মনে হচ্ছে ... এছাড়াও, এটি ডোমেন অংশের সমস্ত ইউনিকোড অক্ষরকে মঞ্জুরি দেয় না, যা আমার মনে হয় অনুমোদিত are
ধ্রুববার্ড

1

সংশোধিত জ্যাঙ্গো ইউআরএল বৈধকরণের রেজেক্স:

import re

ul = '\u00a1-\uffff'  # unicode letters range (must not be a raw string)

# IP patterns 
ipv4_re = r'(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}' 
ipv6_re = r'\[[0-9a-f:\.]+\]'

# Host patterns 
hostname_re = r'[a-z' + ul + r'0-9](?:[a-z' + ul + r'0-9-]{0,61}[a-z' + ul + r'0-9])?'
domain_re = r'(?:\.(?!-)[a-z' + ul + r'0-9-]{1,63}(?<!-))*' # domain names have max length of 63 characters
tld_re = ( 
    r'\.'                                # dot 
    r'(?!-)'                             # can't start with a dash 
    r'(?:[a-z' + ul + '-]{2,63}'         # domain label 
    r'|xn--[a-z0-9]{1,59})'              # or punycode label 
    r'(?<!-)'                            # can't end with a dash 
    r'\.?'                               # may have a trailing dot 
) 
host_re = '(' + hostname_re + domain_re + tld_re + '|localhost)'

regex = re.compile( 
    r'^(?:http|ftp)s?://' # http(s):// or ftp(s)://
    r'(?:\S+(?::\S*)?@)?'  # user:pass authentication 
    r'(?:' + ipv4_re + '|' + ipv6_re + '|' + host_re + ')' # localhost or ip
    r'(?::\d{2,5})?'  # optional port
    r'(?:[/?#][^\s]*)?'  # resource path
    r'\Z', re.IGNORECASE)

উত্স: https://github.com/django/django/blob/master/django/core/omotators.py#L74


দুর্দান্ত কাজ করা লাগে! কিন্তু: (শিরোনামের কথা উল্লেখ করে) কী পরিবর্তন হয়েছে এবং কেন?
হান্স বাউউমিস্টার

0
urlfinders = [
    re.compile("([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}|(((news|telnet|nttp|file|http|ftp|https)://)|(www|ftp)[-A-Za-z0-9]*\\.)[-A-Za-z0-9\\.]+)(:[0-9]*)?/[-A-Za-z0-9_\\$\\.\\+\\!\\*\\(\\),;:@&=\\?/~\\#\\%]*[^]'\\.}>\\),\\\"]"),
    re.compile("([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}|(((news|telnet|nttp|file|http|ftp|https)://)|(www|ftp)[-A-Za-z0-9]*\\.)[-A-Za-z0-9\\.]+)(:[0-9]*)?"),
    re.compile("(~/|/|\\./)([-A-Za-z0-9_\\$\\.\\+\\!\\*\\(\\),;:@&=\\?/~\\#\\%]|\\\\
)+"),
    re.compile("'\\<((mailto:)|)[-A-Za-z0-9\\.]+@[-A-Za-z0-9\\.]+"),
]

দ্রষ্টব্য: আপনার ব্রাউজারে যেমন দেখতে কুৎসিত লাগে ঠিক তেমন পেস্ট অনুলিপি করুন এবং ফর্ম্যাটটি ভাল হওয়া উচিত

পাইথন মেলিং তালিকাগুলিতে পাওয়া যায় এবং জিনোম-টার্মিনালের জন্য ব্যবহৃত হয়

উত্স: http://mail.python.org/pipermail/python-list/2007- জানুয়ারী / 595436.html


4
এই "এনটিপিপি" প্রোটোকলটি অসাধারণ বলে মনে হচ্ছে এবং আমি দেখতে পাচ্ছি এটি মূল উত্সেও রয়েছে। আমি অবাক হয়ে দেখি এই রেজেক্স কতটা পরীক্ষা করা হয়েছিল?
গ্রেগ হিউগিল

ওহ্, দয়া করে এই জাতীয় কোডটি লিখবেন না। যদি আপনি কেবল সাদামাটা ভ্যানিলা ইউআরএলগুলি চান তবে অন্যান্য উত্তরের পরামর্শ অনুসারে urlparse ব্যবহার করুন। আপনি যখন সত্যিই মিলের চেষ্টা করছেন তখন বলুন, ইউআরএলগুলির একটি নির্দিষ্ট উপসেট বা অন্য কোনও বিষয় যা একটি বিশেষ কেস হিসাবে বিবেচিত হতে পারে সে জন্য কাস্টম রেজিক্সগুলি সংরক্ষণ করুন। পরে যদি আপনি কোনও কুরুচিপূর্ণ রেগেক্স খুঁজে পান তবে আপনি অবাক হবেন যে আপনি সাধারণভাবে ইউআরএলগুলি বর্ণনা করার চেষ্টা করছেন বা কিছু অদ্ভুত প্রতিবন্ধকতার কারণে আপনার বাকী কোডটি হ্যান্ডেল করতে পারছে তা নির্দিষ্টভাবে সন্ধান করছেন।
rndmcnlly

@sth: দয়া করে এনএনটিপি প্রোটোকলটি সন্ধান করুন।
গ্রেগ হিউগিল

4
উম, কিছুটা পরে "মেলটো:" প্রোটোকলটির অনুগত ইমেল ঠিকানা হতে হবে, তাই না? মাস্টারিং রেগুলার এক্সপ্রেশনস- এ জেফরি ফ্রেডেল এমন একটি ইউআরএল তৈরি করেছেন যা 4724 বাইট দীর্ঘকাল নিজের মতো করে এমন একটি প্রাণীর সাথে মেলে ....
আরবার্টেইগ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.