Adakah yang tahu tentang ekspresi reguler yang dapat saya gunakan untuk menemukan URL dalam string? Saya telah menemukan banyak ekspresi reguler di Google untuk menentukan apakah seluruh string adalah URL tetapi saya harus dapat mencari seluruh string untuk URL. Misalnya, saya ingin dapat menemukan www.google.com
dan http://yahoo.com
dalam string berikut:
Hello www.google.com World http://yahoo.com
Saya tidak mencari URL spesifik dalam string. Saya mencari SEMUA URL dalam string itulah sebabnya saya membutuhkan ekspresi reguler.
Jawaban:
Ini yang saya gunakan
Bekerja untuk saya, harus bekerja untuk Anda juga.
sumber
\w
mungkin tidak cocok simbol internasional (tergantung pada mesin regex), kisaran diperlukan sebagai gantinya:a-zA-Z0-9\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF
.[\w_-]
menjadi[\w-]
? karena sudah\w
cocok_
. per dokumen mozillawww.yahoo.com
."""(http|ftp|https)://([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?""".r.findAllIn("www.google.com").toList
. JUGA KURANG PENJELASAN untuk jawabanSepertinya tidak ada regex yang sempurna untuk penggunaan ini. Saya menemukan yang cukup solid di sini
Beberapa perbedaan / keunggulan dibandingkan dengan yang lain diposting disini:
moo.com
tanpahttp
atauwww
Lihat di sini untuk contoh
sumber
g
Pilihan ini tidak berlaku di semua implementasi ekspresi reguler (misalnya Ruby built-in implementasi).text = """The link of this question: /programming/6038061/regular-expression-to-find-urls-within-a-string Also there are some urls: www.google.com, facebook.com, http://test.com/method?param=wasd The code below catches all urls in text and returns urls in list.""" urls = re.findall('(?:(?:https?|ftp):\/\/)?[\w/\-?=%.]+\.[\w/\-?=%.]+', text) print(urls)
Keluaran:
[ '/programming/6038061/regular-expression-to-find-urls-within-a-string', 'www.google.com', 'facebook.com', 'http://test.com/method?param=wasd' ]
sumber
&
parameter di url. misalhttp://test.com/method?param=wasd¶m2=wasd2
melewatkan param2Tak satu pun dari solusi yang disediakan di sini memecahkan masalah / kasus penggunaan yang saya miliki.
Apa yang saya berikan di sini, adalah yang terbaik yang saya temukan / buat sejauh ini. Saya akan memperbaruinya ketika saya menemukan kasus tepi baru yang tidak ditangani.
\b #Word cannot begin with special characters (?<![@.,%&#-]) #Protocols are optional, but take them with us if they are present (?<protocol>\w{2,10}:\/\/)? #Domains have to be of a length of 1 chars or greater ((?:\w|\&\#\d{1,5};)[.-]?)+ #The domain ending has to be between 2 to 15 characters (\.([a-z]{2,15}) #If no domain ending we want a port, only if a protocol is specified |(?(protocol)(?:\:\d{1,6})|(?!))) \b #Word cannot end with @ (made to catch emails) (?![@]) #We accept any number of slugs, given we have a char after the slash (\/)? #If we have endings like ?=fds include the ending (?:([\w\d\?\-=#:%@&.;])+(?:\/(?:([\w\d\?\-=#:%@&;.])+))*)? #The last char cannot be one of these symbols .,?!,- exclude these (?<![.,?!-])
sumber
Saya pikir pola regex ini menangani persis apa yang Anda inginkan
/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/
dan ini adalah contoh cuplikan untuk mengekstrak Url:
// The Regular Expression filter $reg_exUrl = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/"; // The Text you want to filter for urls $text = "The text you want /programming/6038061/regular-expression-to-find-urls-within-a-string to filter goes here."; // Check if there is a url in the text preg_match_all($reg_exUrl, $text, $url,$matches); var_dump($matches);
sumber
Semua jawaban di atas tidak cocok untuk karakter Unicode di URL, misalnya: http://google.com?query=đức+filan+đã+search
Untuk solusinya, yang ini harus berhasil:
(ftp:\/\/|www\.|https?:\/\/){1}[a-zA-Z0-9u00a1-\uffff0-]{2,}\.[a-zA-Z0-9u00a1-\uffff0-]{2,}(\S*)
sumber
Jika Anda harus ketat dalam memilih tautan, saya akan memilih:
(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))
Untuk info lebih lanjut, baca ini:
Pola Regex Akurat dan Liberal yang Ditingkatkan untuk Mencocokkan URL
sumber
Saya menemukan ini yang mencakup sebagian besar tautan sampel, termasuk bagian subdirektori.
Regex adalah:
(?:(?:https?|ftp):\/\/|\b(?:[a-z\d]+\.))(?:(?:[^\s()<>]+|\((?:[^\s()<>]+|(?:\([^\s()<>]+\)))?\))+(?:\((?:[^\s()<>]+|(?:\(?:[^\s()<>]+\)))?\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))?
sumber
Jika Anda memiliki pola url, Anda harus dapat mencarinya di string Anda. Pastikan saja bahwa pola tidak memiliki
^
dan$
menandai awal dan akhir string url. Jadi jika P adalah pola untuk URL, cari kecocokan untuk P.sumber
^(http|https|ftp)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&%\$#\=~])*[^\.\,\)\(\s]$
http://regexpal.com/
; di sana Anda dapat menguji ekspresi yang berbeda terhadap string Anda sampai Anda melakukannya dengan benar.Community
tab termasuk yang untuk urlSaya menggunakan ekspresi reguler di bawah ini untuk menemukan url dalam sebuah string:
/(http|https)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/
sumber
[a-zA-Z]{2,3}
sangat buruk untuk mencocokkan TLD, lihat daftar resmi: data.iana.org/TLD/tlds-alpha-by-domain.txtDi sini regexp yang sedikit lebih dioptimalkan:
(?:(?:(https?|ftp|file):\/\/|www\.|ftp\.)|([\w\-_]+(?:\.|\s*\[dot\]\s*[A-Z\-_]+)+))([A-Z\-\.,@?^=%&:\/~\+#]*[A-Z\-\@?^=%&\/~\+#]){2,6}?
Berikut ini pengujian dengan data: https://regex101.com/r/sFzzpY/6
sumber
Pendek dan sederhana. Saya belum menguji dalam kode javascript tetapi tampaknya itu akan berhasil:
((http|ftp|https):\/\/)?(([\w.-]*)\.([\w]*))
Kode di regex101.com
sumber
Saya menggunakan Regex ini:
/((\w+:\/\/\S+)|(\w+[\.:]\w+\S+))[^\s,\.]/ig
Ini berfungsi dengan baik untuk banyak URL, seperti: http://google.com , https://dev-site.io:8080/home?val=1&count=100 , www.regexr.com, localhost: 8080 / path,. ..
sumber
Ini adalah sedikit perbaikan / penyesuaian untuk (tergantung pada apa yang Anda butuhkan) jawaban Rajeev:
([\w\-_]+(?:(?:\.|\s*\[dot\]\s*[A-Z\-_]+)+))([A-Z\-\.,@?^=%&:/~\+#]*[A-Z\-\@?^=%&/~\+#]){2,6}?
Lihat di sini untuk contoh apa yang cocok dan tidak cocok.
Saya menyingkirkan cek untuk "http" dll karena saya ingin menangkap url tanpa ini. Saya menambahkan sedikit ke regex untuk menangkap beberapa url yang dikaburkan (yaitu di mana pengguna menggunakan [titik] alih-alih "."). Akhirnya saya mengganti "\ w" dengan "AZ" menjadi dan "{2,3}" untuk mengurangi positif palsu seperti v2.0 dan "moo.0dd".
Setiap perbaikan menyambut ini.
sumber
[a-zA-Z]{2,3}
sangat buruk untuk mencocokkan TLD, lihat daftar resmi: data.iana.org/TLD/tlds-alpha-by-domain.txt . Juga ekspresi reguler Anda_.........&&&&&&
tidak yakin itu adalah url yang valid.Metode yang mungkin terlalu sederhana, tetapi cara kerjanya mungkin:
[localhost|http|https|ftp|file]+://[\w\S(\.|:|/)]+
Saya mengujinya di Python dan selama parsing string berisi spasi sebelum dan sesudah dan tidak ada di url (yang belum pernah saya lihat sebelumnya) itu akan baik-baik saja.
Ini adalah ide online yang mendemonstrasikannya
Namun, berikut beberapa manfaat menggunakannya:
file:
danlocalhost
juga alamat ip#
atau-
(lihat url posting ini)sumber
Penggunaan regex yang disediakan oleh @JustinLevene tidak memiliki urutan escape yang tepat di garis miring ke belakang. Diperbarui untuk sekarang menjadi benar, dan ditambahkan dalam kondisi untuk mencocokkan protokol FTP juga: Akan cocok dengan semua url dengan atau tanpa protokol, dan tanpa "www."
Kode:
^((http|ftp|https):\/\/)?([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:\/~+#-]*[\w@?^=%&\/~+#-])?
Contoh: https://regex101.com/r/uQ9aL4/65
sumber
MENINGKATKAN
Mendeteksi Url seperti ini:
Ekspresi Reguler:
/^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=.]+$/gm
sumber
Menulis satu sendiri:
let regex = /([\w+]+\:\/\/)?([\w\d-]+\.)*[\w-]+[\.\:]\w+([\/\?\=\&\#]?[\w-]+)*\/?/gm
Ini berfungsi di SEMUA domain berikut:
https://www.facebook.com https://app-1.number123.com http://facebook.com ftp://facebook.com http://localhost:3000 localhost:3000/ unitedkingdomurl.co.uk this.is.a.url.com/its/still=going?wow shop.facebook.org app.number123.com app1.number123.com app-1.numbEr123.com app.dashes-dash.com www.facebook.com facebook.com fb.com/hello_123 fb.com/hel-lo fb.com/hello/goodbye fb.com/hello/goodbye?okay fb.com/hello/goodbye?okay=alright Hello www.google.com World http://yahoo.com https://www.google.com.tr/admin/subPage?qs1=sss1&qs2=sss2&qs3=sss3#Services https://google.com.tr/test/subPage?qs1=sss1&qs2=sss2&qs3=sss3#Services http://google.com/test/subPage?qs1=sss1&qs2=sss2&qs3=sss3#Services ftp://google.com/test/subPage?qs1=sss1&qs2=sss2&qs3=sss3#Services www.google.com.tr/test/subPage?qs1=sss1&qs2=sss2&qs3=sss3#Services www.google.com/test/subPage?qs1=sss1&qs2=sss2&qs3=sss3#Services drive.google.com/test/subPage?qs1=sss1&qs2=sss2&qs3=sss3#Services https://www.example.pl http://www.example.com www.example.pl example.com http://blog.example.com http://www.example.com/product http://www.example.com/products?id=1&page=2 http://www.example.com#up http://255.255.255.255 255.255.255.255
Anda dapat melihat performanya di sini di regex101 dan menyesuaikan sesuai kebutuhan
sumber
Saya menggunakan logika menemukan teks di antara dua titik atau titik
regex di bawah berfungsi dengan baik dengan python
(?<=\.)[^}]*(?=\.)
sumber
Mencocokkan URL dalam teks seharusnya tidak terlalu rumit
(?:(?:(?:ftp|http)[s]*:\/\/|www\.)[^\.]+\.[^ \n]+)
https://regex101.com/r/wewpP1/2
sumber
Saya menggunakan ini
^(https?:\\/\\/([a-zA-z0-9]+)(\\.[a-zA-z0-9]+)(\\.[a-zA-z0-9\\/\\=\\-\\_\\?]+)?)$
sumber
(?:vnc|s3|ssh|scp|sftp|ftp|http|https)\:\/\/[\w\.]+(?:\:?\d{0,5})|(?:mailto|)\:[\w\.]+\@[\w\.]+
Jika Anda menginginkan penjelasan setiap bagian, coba di regexr [.] Com di mana Anda akan mendapatkan penjelasan yang bagus dari setiap karakter.
Ini dibagi dengan "|" atau "ATAU" karena tidak semua URI yang dapat digunakan memiliki "//" jadi di sinilah Anda dapat membuat daftar skema sebagai atau ketentuan yang ingin Anda cocokkan.
sumber
Saya telah memanfaatkan kelas c # Uri dan berfungsi, baik dengan Alamat IP, localhost
public static bool CheckURLIsValid(string url) { Uri returnURL; return (Uri.TryCreate(url, UriKind.Absolute, out returnURL) && (returnURL.Scheme == Uri.UriSchemeHttp || returnURL.Scheme == Uri.UriSchemeHttps)); }
sumber
Saya menyukai solusi Stefan Henze tetapi hasilnya 34,56. Ini terlalu umum dan saya memiliki html yang belum diurai. Ada 4 jangkar untuk url;
www,
http: \ (dan co),
. diikuti dengan huruf dan kemudian /,
atau huruf. dan salah satunya: https://ftp.isc.org/www/survey/reports/current/bynum.txt .
Saya menggunakan banyak info dari utas ini. Terima kasih semua.
"(((((http|ftp|https|gopher|telnet|file|localhost):\\/\\/)|(www\\.)|(xn--)){1}([\\w_-]+(?:(?:\\.[\\w_-]+)+))([\\w.,@?^=%&:\\/~+#-]*[\\w@?^=%&\\/~+#-])?)|(([\\w_-]{2,200}(?:(?:\\.[\\w_-]+)*))((\\.[\\w_-]+\\/([\\w.,@?^=%&:\\/~+#-]*[\\w@?^=%&\\/~+#-])?)|(\\.((org|com|net|edu|gov|mil|int|arpa|biz|info|unknown|one|ninja|network|host|coop|tech)|(jp|br|it|cn|mx|ar|nl|pl|ru|tr|tw|za|be|uk|eg|es|fi|pt|th|nz|cz|hu|gr|dk|il|sg|uy|lt|ua|ie|ir|ve|kz|ec|rs|sk|py|bg|hk|eu|ee|md|is|my|lv|gt|pk|ni|by|ae|kr|su|vn|cy|am|ke))))))(?!(((ttp|tp|ttps):\\/\\/)|(ww\\.)|(n--)))"
Di atas memecahkan hampir semua hal kecuali string seperti "eurls: www.google.com, facebook.com, http: //test.com/", yang dikembalikan sebagai string tunggal. Tbh idk kenapa saya menambahkan gopher dll. Kode Proof R
if(T){ wierdurl<-vector() wierdurl[1]<-"https://JP納豆.例.jp/dir1/納豆 " wierdurl[2]<-"xn--jp-cd2fp15c.xn--fsq.jp " wierdurl[3]<-"http://52.221.161.242/2018/11/23/biofourmis-collab" wierdurl[4]<-"https://12000.org/ " wierdurl[5]<-" https://vg-1.com/?page_id=1002 " wierdurl[6]<-"https://3dnews.ru/822878" wierdurl[7]<-"The link of this question: /programming/6038061/regular-expression-to-find-urls-within-a-string Also there are some urls: www.google.com, facebook.com, http://test.com/method?param=wasd The code below catches all urls in text and returns urls in list. " wierdurl[8]<-"Thelinkofthisquestion:/programming/6038061/regular-expression-to-find-urls-within-a-string Alsotherearesomeurls:www.google.com,facebook.com,http://test.com/method?param=wasd Thecodebelowcatchesallurlsintextandreturnsurlsinlist. " wierdurl[9]<-"Thelinkofthisquestion:/programming/6038061/regular-expression-to-find-urls-within-a-stringAlsotherearesomeurlsZwww.google.com,facebook.com,http://test.com/method?param=wasdThecodebelowcatchesallurlsintextandreturnsurlsinlist." wierdurl[10]<-"1facebook.com/1res" wierdurl[11]<-"1facebook.com/1res/wat.txt" wierdurl[12]<-"www.e " wierdurl[13]<-"is this the file.txt i need" wierdurl[14]<-"xn--jp-cd2fp15c.xn--fsq.jpinspiredby " wierdurl[15]<-"[xn--jp-cd2fp15c.xn--fsq.jp/inspiredby " wierdurl[16]<-"xnto--jpto-cd2fp15c.xnto--fsq.jpinspiredby " wierdurl[17]<-"fsety--fwdvg-gertu56.ffuoiw--ffwsx.3dinspiredby " wierdurl[18]<-"://3dnews.ru/822878 " wierdurl[19]<-" http://mywebsite.com/msn.co.uk " wierdurl[20]<-" 2.0http://www.abe.hip " wierdurl[21]<-"www.abe.hip" wierdurl[22]<-"hardware/software/data" regexstring<-vector() regexstring[2]<-"(http|ftp|https)://([\\w_-]+(?:(?:\\.[\\w_-]+)+))([\\w.,@?^=%&:/~+#-]*[\\w@?^=%&/~+#-])?" regexstring[3]<-"/(?:(?:https?|ftp|file):\\/\\/|www\\.|ftp\\.)(?:\\([-A-Z0-9+&@#\\/%=~_|$?!:,.]*\\)|[-A-Z0-9+&@#\\/%=~_|$?!:,.])*(?:\\([-A-Z0-9+&@#\\/%=~_|$?!:,.]*\\)|[A-Z0-9+&@#\\/%=~_|$])/igm" regexstring[4]<-"[a-zA-Z0-9\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]?" regexstring[5]<-"((http|ftp|https)\\:\\/\\/)?([\\w_-]+(?:(?:\\.[\\w_-]+)+))([\\w.,@?^=%&:/~+#-]*[\\w@?^=%&/~+#-])?" regexstring[6]<-"((http|ftp|https):\\/\\/)?([\\w_-]+(?:(?:\\.[\\w_-]+)+))([\\w.,@?^=%&:\\/~+#-]*[\\w@?^=%&\\/~+#-])?" regexstring[7]<-"(http|ftp|https)(:\\/\\/)([\\w_-]+(?:(?:\\.[\\w_-]+)+))([\\w.,@?^=%&:/~+#-]*[\\w@?^=%&/~+#-])?" regexstring[8]<-"(?:(?:https?|ftp|file):\\/\\/|www\\.|ftp\\.)(?:\\([-A-Z0-9+&@#/%=~_|$?!:,.]*\\)|[-A-Z0-9+&@#/%=~_|$?!:,.])*(?:\\([-A-Z0-9+&@#/%=~_|$?!:,.]*\\)|[A-Z0-9+&@#/%=~_|$])" regexstring[10]<-"((http[s]?|ftp):\\/)?\\/?([^:\\/\\s]+)((\\/\\w+)*\\/)([\\w\\-\\.]+[^#?\\s]+)(.*)?(#[\\w\\-]+)?" regexstring[12]<-"http[s:/]+[[:alnum:]./]+" regexstring[9]<-"http[s:/]+[[:alnum:]./]+" #in DLpages 230 regexstring[1]<-"[[:alnum:]-]+?[.][:alnum:]+?(?=[/ :])" #in link_graphs 50 regexstring[13]<-"^(?!mailto:)(?:(?:http|https|ftp)://)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$" regexstring[14]<-"(((((http|ftp|https):\\/\\/)|(www\\.)|(xn--)){1}([\\w_-]+(?:(?:\\.[\\w_-]+)+))([\\w.,@?^=%&:\\/~+#-]*[\\w@?^=%&\\/~+#-])?)|(([\\w_-]+(?:(?:\\.[\\w_-]+)*))((\\.((org|com|net|edu|gov|mil|int)|(([:alpha:]{2})(?=[, ]))))|([\\/]([\\w.,@?^=%&:\\/~+#-]*[\\w@?^=%&\\/~+#-])?))))(?!(((ttp|tp|ttps):\\/\\/)|(ww\\.)|(n--)))" regexstring[15]<-"(((((http|ftp|https|gopher|telnet|file|localhost):\\/\\/)|(www\\.)|(xn--)){1}([\\w_-]+(?:(?:\\.[\\w_-]+)+))([\\w.,@?^=%&:\\/~+#-]*[\\w@?^=%&\\/~+#-])?)|(([\\w_-]{2,200}(?:(?:\\.[\\w_-]+)*))((\\.[\\w_-]+\\/([\\w.,@?^=%&:\\/~+#-]*[\\w@?^=%&\\/~+#-])?)|(\\.((org|com|net|edu|gov|mil|int|arpa|biz|info|unknown|one|ninja|network|host|coop|tech)|(jp|br|it|cn|mx|ar|nl|pl|ru|tr|tw|za|be|uk|eg|es|fi|pt|th|nz|cz|hu|gr|dk|il|sg|uy|lt|ua|ie|ir|ve|kz|ec|rs|sk|py|bg|hk|eu|ee|md|is|my|lv|gt|pk|ni|by|ae|kr|su|vn|cy|am|ke))))))(?!(((ttp|tp|ttps):\\/\\/)|(ww\\.)|(n--)))" } for(i in wierdurl){#c(7,22) for(c in regexstring[c(15)]) { print(paste(i,which(regexstring==c))) print(str_extract_all(i,c)) } }
sumber
Ini yang terbaik.
NSString *urlRegex="(http|ftp|https|www|gopher|telnet|file)(://|.)([\\w_-]+(?:(?:\\.[\\w_-]+)+))([\\w.,@?^=%&:/~+#-]*[\\w@?^=%&/~+#-])?";
sumber
Ini yang paling sederhana. yang cocok untukku.
%(http|ftp|https|www)(://|\.)[A-Za-z0-9-_\.]*(\.)[a-z]*%
sumber
Sederhana saja.
Gunakan pola ini:
\b((ftp|https?)://)?([\w-\.]+\.(com|net|org|gov|mil|int|edu|info|me)|(\d+\.\d+\.\d+\.\d+))(:\d+)?(\/[\w-\/]*(\?\w*(=\w+)*[&\w-=]*)*(#[\w-]+)*)?
Itu cocok dengan tautan apa pun yang berisi:
Protokol yang Diizinkan: http, https dan ftp
Domain yang Diizinkan: * .com, * .net, * .org, * .gov, * .mil, * .int, * .edu, * .info dan * .me OR IP
Port yang Diizinkan: true
Parameter yang Diizinkan: benar
Hash yang Diizinkan: true
sumber