นิพจน์ทั่วไปเพื่อค้นหา URL ภายในสตริง


95

มีใครรู้จักนิพจน์ทั่วไปที่ฉันสามารถใช้ค้นหา URL ภายในสตริงได้บ้าง ฉันพบนิพจน์ทั่วไปจำนวนมากใน Google เพื่อพิจารณาว่าสตริงทั้งหมดเป็น URL หรือไม่ แต่ฉันต้องสามารถค้นหา URL ได้ทั้งสตริง ตัวอย่างเช่นฉันต้องการที่จะสามารถค้นหาwww.google.comและhttp://yahoo.comในสตริงต่อไปนี้:

Hello www.google.com World http://yahoo.com

ฉันไม่ได้มองหา URL เฉพาะในสตริง ฉันกำลังมองหา URL ทั้งหมดในสตริงซึ่งเป็นสาเหตุที่ฉันต้องการนิพจน์ทั่วไป


หากคุณมีนิพจน์สำหรับสตริงทั้งหมดให้ใช้ ^ และ $ out เพื่อให้ตรงกับส่วนต่างๆของสตริง
entonio

คำตอบ:


206

นี่คือสิ่งที่ฉันใช้

(http|ftp|https)://([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?

ได้ผลสำหรับฉันควรทำงานให้คุณด้วย


7
อย่าลืมหลีกหนีการเฉือนไปข้างหน้า
ทำเครื่องหมาย

1
เป็นปี 2017 และชื่อโดเมน Unicode มีอยู่ทั่วทุกแห่ง \wอาจไม่ตรงกับสัญลักษณ์ระหว่างประเทศ (ขึ้นอยู่กับเครื่องยนต์ regex), a-zA-Z0-9\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEFช่วงเป็นสิ่งจำเป็นแทน:
Michael Antipin

3
นี่เป็นเรื่องปกติสำหรับวัตถุประสงค์ทั่วไป แต่มีหลายกรณีที่ไม่สามารถจับได้ การดำเนินการนี้บังคับให้ลิงก์ของคุณถูกนำหน้าด้วยโปรโตคอล หากเลือกที่จะเพิกเฉยต่อโปรโตคอลระบบจะยอมรับการลงท้ายของอีเมลเนื่องจากเป็นกรณีของ test@testing.com
Squazz

4
ไม่ควร[\w_-]จะเป็น[\w-]? เพราะ\wตรงกัน_แล้ว ต่อmozilla docs
ช่วง

2
upvoted www.yahoo.comแต่คำตอบนี้ไม่ได้ทำงานในสิ่งที่เป็นคำถามที่ถาม """(http|ftp|https)://([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?""".r.findAllIn("www.google.com").toList. นอกจากนี้ยังขาดคำอธิบายสำหรับคำตอบ
Prayagupd

45

เดาว่า regex ไม่เหมาะสำหรับการใช้งานนี้ ฉันพบอันที่เป็นของแข็งที่นี่

/(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)(?:\([-A-Z0-9+&@#\/%=~_|$?!:,.]*\)|[-A-Z0-9+&@#\/%=~_|$?!:,.])*(?:\([-A-Z0-9+&@#\/%=~_|$?!:,.]*\)|[A-Z0-9+&@#\/%=~_|$])/igm

ความแตกต่าง / ข้อดีบางประการเมื่อเทียบกับข้ออื่น ๆ ที่โพสต์ไว้ที่นี่:

  • มันไม่ได้ตรงกับที่อยู่อีเมล
  • มันตรงกับ localhost: 12345
  • จะไม่ตรวจพบสิ่งที่เหมือนmoo.comไม่มีhttpหรือwww

ดูตัวอย่างได้ที่นี่


4
ตรงกับ www.e นี่ไม่ใช่ url ที่ถูกต้อง
Ihor Herasymchuk

gตัวเลือกที่ไม่ถูกต้องในทุกการใช้งานที่แสดงออกปกติ (เช่นทับทิมตัวในการดำเนินงาน)
Huliax

23
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)

เอาท์พุต:

[
    '/programming/6038061/regular-expression-to-find-urls-within-a-string', 
    'www.google.com', 
    'facebook.com',
    'http://test.com/method?param=wasd'
]

Kotlin val urlRegex = "(? :( ?: https? | ftp): \\ / \\ /)? [\\ w / \\ -? =%.] + \\. [\\ w / \\ - ? =%.] + "
Akshay Nandwana

ไม่มี&พารามิเตอร์ใน url เช่นhttp://test.com/method?param=wasd&param2=wasd2คิดถึง param2
TrophyGeek

10

ไม่มีวิธีแก้ปัญหาใดที่ให้ไว้ที่นี่เพื่อแก้ไขปัญหา / กรณีการใช้งานที่ฉันมี

สิ่งที่ฉันให้ไว้ที่นี่คือสิ่งที่ดีที่สุดที่ฉันพบ / ทำจนถึงตอนนี้ ฉันจะอัปเดตเมื่อพบเคสขอบใหม่ที่ไม่สามารถจัดการได้

\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
(?<![.,?!-])

1
มีวิธีใดบ้างที่จะทำให้จาวาสคริปต์นี้เป็นมิตร เนื่องจากกลุ่มการดักจับที่ตั้งชื่อไม่สามารถทำงานได้อย่างสมบูรณ์ดังนั้นการตรวจสอบค่าโปรโตคอลจึงไม่สามารถตรวจสอบได้
einord

6

ฉันคิดว่ารูปแบบ regex นี้จัดการสิ่งที่คุณต้องการได้อย่างแม่นยำ

/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/

และนี่คือตัวอย่างข้อมูลเพื่อแยก 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);

5

คำตอบทั้งหมดข้างต้นไม่ตรงกับอักขระ Unicode ใน URL ตัวอย่างเช่นhttp://google.com?query=đức+filan+đã+search

สำหรับวิธีแก้ปัญหานี้ควรใช้งานได้:

(ftp:\/\/|www\.|https?:\/\/){1}[a-zA-Z0-9u00a1-\uffff0-]{2,}\.[a-zA-Z0-9u00a1-\uffff0-]{2,}(\S*)

2
ห้ามใช้อักขระ Unicode ตาม RFC 1738 บน URL ( faqs.org/rfcs/rfc1738.html ) พวกเขาจะต้องเข้ารหัสเปอร์เซ็นต์เพื่อให้เป็นไปตามมาตรฐาน - แม้ว่าฉันคิดว่าอาจมีการเปลี่ยนแปลงเมื่อเร็ว ๆ นี้ - ควรค่าแก่การอ่าน w3.org/International/articles/idn-and-iri
mrswadge

@mrswadge ฉันแค่ครอบคลุมกรณี เราไม่แน่ใจว่าทุกคนให้ความสำคัญกับมาตรฐานหรือไม่ ขอบคุณสำหรับข้อมูลของคุณ
Duc Filan

มีเพียงอันนี้เท่านั้นที่ทำงานได้อย่างสมบูรณ์สำหรับฉันที่มี URL เช่น " example.com " "www.exmaple.com" " example.com " " example.co.in " " exmaple.com/?q='me '"
Krissh

5

หากคุณต้องเข้มงวดในการเลือกลิงก์ฉันจะไปที่:

(?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`!()\[\]{};:'".,<>?«»“”‘’]))

สำหรับข้อมูลเพิ่มเติมโปรดอ่านสิ่งนี้:

รูปแบบ Regex แบบเสรีนิยมที่ได้รับการปรับปรุงสำหรับการจับคู่ URL


2
อย่าทำอย่างนั้น regular-expressions.info/catastrophic.htmlมันจะฆ่าแอปของคุณ ...
Auric

4

ฉันพบสิ่งนี้ซึ่งครอบคลุมลิงก์ตัวอย่างส่วนใหญ่รวมถึงส่วนไดเรกทอรีย่อย

Regex คือ:

(?:(?:https?|ftp):\/\/|\b(?:[a-z\d]+\.))(?:(?:[^\s()<>]+|\((?:[^\s()<>]+|(?:\([^\s()<>]+\)))?\))+(?:\((?:[^\s()<>]+|(?:\(?:[^\s()<>]+\)))?\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))?

3

หากคุณมีรูปแบบ URL คุณควรจะค้นหาในสตริงได้ ตรวจสอบให้แน่ใจว่ารูปแบบไม่มี^และ$ทำเครื่องหมายจุดเริ่มต้นและจุดสิ้นสุดของสตริง URL ดังนั้นถ้า P เป็นรูปแบบของ URL ให้มองหาค่าที่ตรงกันสำหรับ P


นี่คือ regex ที่ฉันพบซึ่งตรวจสอบว่าสตริงทั้งหมดเป็น URL หรือไม่ ฉันเอา ^ ที่ขอทานออกมาและ $ ในตอนท้ายเหมือนที่คุณพูด แต่มันก็ยังไม่ได้ ผมทำอะไรผิดหรือเปล่า? ^(http|https|ftp)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&amp;%\$#\=~])*[^\.\,\)\(\s]$
user758263

อาจช่วยได้หากคุณแสดงภาษาที่คุณใช้อยู่ ทั้งสองวิธีให้แน่ใจว่าได้ตรวจสอบhttp://regexpal.com/; คุณสามารถทดสอบนิพจน์ต่างๆกับสตริงของคุณได้จนกว่าคุณจะเข้าใจถูกต้อง
entonio

@ user758263 - คุณต้องการ regex ที่ซับซ้อนสำหรับ url หรือไม่? ขึ้นอยู่กับ URL ที่เป็นไปได้ที่คุณอาจพบ โปรดดูที่gskinner.com/RegExrเพื่อทดลองใช้ regex นอกจากนี้ยังมีตัวอย่างหลายร้อยตัวอย่างทางด้านขวาใต้Communityแท็บรวมถึงตัวอย่างสำหรับ URL
manojlds

ฉันพยายามค้นหา URL ที่เป็นไปได้ทั้งหมดและฉันใช้ C ++ ขอบคุณสำหรับลิงค์ entonio และ manojlds ไซต์ gskinner มีประโยชน์อย่างยิ่งเนื่องจากมีตัวอย่าง
user758263

3

ฉันใช้นิพจน์ทั่วไปด้านล่างเพื่อค้นหา url ในสตริง:

/(http|https)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/

2
[a-zA-Z]{2,3}แย่มากสำหรับการจับคู่ TLD ดูรายชื่ออย่างเป็นทางการ: data.iana.org/TLD/tlds-alpha-by-domain.txt
Toto

3

นี่คือ regexp ที่ปรับให้เหมาะสมมากขึ้นเล็กน้อย:

(?:(?:(https?|ftp|file):\/\/|www\.|ftp\.)|([\w\-_]+(?:\.|\s*\[dot\]\s*[A-Z\-_]+)+))([A-Z\-\.,@?^=%&amp;:\/~\+#]*[A-Z\-\@?^=%&amp;\/~\+#]){2,6}?

นี่คือการทดสอบกับข้อมูล: https://regex101.com/r/sFzzpY/6

ป้อนคำอธิบายภาพที่นี่


2

สั้นและเรียบง่าย ฉันยังไม่ได้ทดสอบในโค้ดจาวาสคริปต์ แต่ดูเหมือนว่าจะใช้งานได้:

((http|ftp|https):\/\/)?(([\w.-]*)\.([\w]*))

รหัสบน regex101.com

ตัวอย่างโค้ด


1
ฉันชอบ regex ของคุณเพราะเป็นสิ่งที่ฉันกำลังมองหา: ฉันจำเป็นต้องระบุและตัด URL ออกจากข้อความบางส่วนไม่สามารถตรวจสอบความถูกต้องได้ ทำงานในราง
Dagmar

@Dagmar ดีใจที่ได้ยิน :)
bafsar


1

นี่คือการปรับปรุง / การปรับเปลี่ยนเล็กน้อย (ขึ้นอยู่กับสิ่งที่คุณต้องการ) คำตอบของ Rajeev:

([\w\-_]+(?:(?:\.|\s*\[dot\]\s*[A-Z\-_]+)+))([A-Z\-\.,@?^=%&amp;:/~\+#]*[A-Z\-\@?^=%&amp;/~\+#]){2,6}?

ดู ที่นี่สำหรับตัวอย่างของสิ่งที่มันไม่และไม่ตรงกับ

ฉันยกเลิกการตรวจสอบ "http" ฯลฯ เนื่องจากฉันต้องการตรวจจับ url โดยไม่มีสิ่งนี้ ฉันเพิ่มลงใน regex เล็กน้อยเพื่อให้จับ URL ที่สับสน (เช่นที่ผู้ใช้ใช้ [dot] แทน a ".") สุดท้ายฉันแทนที่ "\ w" ด้วย "AZ" เป็นและ "{2,3}" เพื่อลดผลบวกปลอมเช่น v2.0 และ "moo.0dd"

การปรับปรุงใด ๆ เกี่ยวกับการต้อนรับนี้


[a-zA-Z]{2,3}เป็นที่น่าสงสารจริงๆสำหรับการจับคู่ TLD, ดูรายการอย่างเป็นทางการ: data.iana.org/TLD/tlds-alpha-by-domain.txt นอกจากนี้ regex ของคุณยัง_.........&&&&&&ไม่แน่ใจว่าเป็น URL ที่ถูกต้อง
โตโต้

ขอบคุณสำหรับ JE SUIS CHAELIE ข้อเสนอแนะสำหรับการปรับปรุง (โดยเฉพาะอย่างยิ่งสำหรับผลบวกที่ผิดพลาด)?
avjaarsveld

1

อาจง่ายเกินไป แต่วิธีการทำงานอาจเป็น:

[localhost|http|https|ftp|file]+://[\w\S(\.|:|/)]+

ฉันทดสอบบน Python และตราบใดที่การแยกวิเคราะห์สตริงมีช่องว่างก่อนและหลังและไม่มีใน url (ซึ่งฉันไม่เคยเห็นมาก่อน) ก็น่าจะใช้ได้

นี่คือแนวคิดออนไลน์ที่แสดงให้เห็น

อย่างไรก็ตามนี่คือประโยชน์บางประการของการใช้งาน:

  • มันรับรู้file:และlocalhostเช่นเดียวกับที่อยู่ IP
  • มันจะไม่ตรงกับพวกเขา
  • ไม่คำนึงถึงตัวละครที่ผิดปกติเช่น#หรือ-(ดู url ของโพสต์นี้)

1

การใช้ regex ที่จัดทำโดย @JustinLevene ไม่มีลำดับการหลีกเลี่ยงที่เหมาะสมบนเครื่องหมายทับด้านหลัง อัปเดตเป็นตอนนี้ถูกต้องและเพิ่มเงื่อนไขให้ตรงกับโปรโตคอล FTP เช่นกัน: จะจับคู่กับ URL ทั้งหมดที่มีหรือไม่มีโปรโตคอลและโดยไม่ต้อง "www."

รหัส: ^((http|ftp|https):\/\/)?([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:\/~+#-]*[\w@?^=%&\/~+#-])?

ตัวอย่าง: https://regex101.com/r/uQ9aL4/65



1

เขียนขึ้นมาเอง:

let regex = /([\w+]+\:\/\/)?([\w\d-]+\.)*[\w-]+[\.\:]\w+([\/\?\=\&\#]?[\w-]+)*\/?/gm

ทำงานบนโดเมนทั้งหมดต่อไปนี้:

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

คุณสามารถดูการทำงานได้ที่นี่ใน regex101และปรับเปลี่ยนได้ตามต้องการ


0

ฉันใช้ตรรกะในการค้นหาข้อความระหว่างจุดหรือจุดสองจุด

regex ด้านล่างทำงานได้ดีกับ python

(?<=\.)[^}]*(?=\.)



0
(?:vnc|s3|ssh|scp|sftp|ftp|http|https)\:\/\/[\w\.]+(?:\:?\d{0,5})|(?:mailto|)\:[\w\.]+\@[\w\.]+

หากคุณต้องการคำอธิบายของแต่ละส่วนลองใน regexr [.] com ซึ่งคุณจะได้รับคำอธิบายที่ดีเยี่ยมเกี่ยวกับตัวละครทุกตัว

ซึ่งแบ่งด้วย "|" หรือ "หรือ" เนื่องจาก URI ที่ใช้ไม่ได้ทั้งหมดจะมี "//" ดังนั้นนี่คือที่ที่คุณสามารถสร้างรายการของรูปแบบเป็นหรือเงื่อนไขที่คุณสนใจในการจับคู่


0

ฉันใช้คลาส c # Uri และใช้งานได้ดีกับที่อยู่ 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));


    }

0

ฉันชอบวิธีแก้ปัญหาของ Stefan Henze แต่จะได้รับ 34.56 มันกว้างเกินไปและฉันมี html ที่ไม่ได้แยกวิเคราะห์ มี 4 จุดยึดสำหรับ url;

www,

http: \ (และร่วม),

. ตามด้วยตัวอักษรแล้ว /,

หรือตัวอักษร และเป็นหนึ่งในเหล่านี้: https://ftp.isc.org/www/survey/reports/current/bynum.txt

ฉันใช้ข้อมูลมากมายจากชุดข้อความนี้ ขอบคุณทุกคน.

"(((((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--)))"

ด้านบนแก้ปัญหาทุกอย่างยกเว้นสตริงเช่น "eurls: www.google.com, facebook.com, http: //test.com/" ซึ่งจะส่งคืนเป็นสตริงเดียว Tbh idk ทำไมฉันเพิ่มโกเฟอร์ ฯลฯ Proof R code

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))
  }
}


-1

นี่เป็นวิธีที่ง่ายที่สุด งานไหนดีสำหรับฉัน

%(http|ftp|https|www)(://|\.)[A-Za-z0-9-_\.]*(\.)[a-z]*%

-1

มันเป็นเรื่องง่าย

ใช้รูปแบบนี้: \b((ftp|https?)://)?([\w-\.]+\.(com|net|org|gov|mil|int|edu|info|me)|(\d+\.\d+\.\d+\.\d+))(:\d+)?(\/[\w-\/]*(\?\w*(=\w+)*[&\w-=]*)*(#[\w-]+)*)?

ตรงกับลิงค์ใด ๆ ที่มี:

โปรโตคอลที่อนุญาต: http, https และ ftp

โดเมนที่อนุญาต: * .com, * .net, * .org, * .gov, * .mil, * .int, * .edu, * .info และ * .me หรือ IP

พอร์ตที่อนุญาต: จริง

พารามิเตอร์ที่อนุญาต: จริง

แฮชที่อนุญาต: จริง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.