簡體   English   中英

正則表達式以短副本查找網址

[英]Regex to find web addresses in short copy

擁有簡短副本,我需要匹配所有出現的網站鏈接。 為了簡單起見,需要找出這種格式的地址:

www.aaaaaa.bbbbbb
http://aaaaaa.bbbb
https://aa.bbbb

但我還需要照顧更長的www / http / https版本:

www.aaaaa.bbbb.ccc.ddd.eeee

等等,因此基本上不知道子域的數量。 現在我想出了這個正則表達式:

(www\.([a-zA-Z0-9-_]|\.(?!\s))+)[\s|,|$]|(http(s)?:\/\/(?!\.)([a-zA-Z0-9-_]|\.(?!\s))+)[\s|,|$]

如果您測試:

this is some tex with www.somewIebsite.dfd.jhh.hjh inside of it or maybe http://www.ssss.com or maybe https://evenore.com hahaah blah

它的工作原理很好,但地址末尾的時間除外。 $似乎僅在末尾有\\ n時才起作用,並且失敗:

this is some tex with www.somewIebsite.dfd.jhh.hjh

我猜想修復很簡單,我想念一些明顯的東西,那么我該如何解決呢? 順便說一句,如果你想快速玩轉https://regex101.com/r/eL1bI4/3,我在這里發布了正則表達式

問題是您將結束錨$放置在字符組[]

[\s|,|$]

然后,將其按字面意義解釋為美元符號,而不作為錨點(管道字符|也按字面意義進行解釋,在那里不需要)。 解決方案是將$錨點移到外部:

(?:[\s,]|$)

但是,在這種情況下,使用正向先行而不是非捕獲組更有意義(您不希望尾隨空格或逗號):

(?=[\s,]|$)

結果,您將得到以下正則表達式模式:

(www\.([a-zA-Z0-9-_]|\.(?!\s))+)(?=[\s,]|$)|(http(s)?:\/\/(?!\.)([a-zA-Z0-9-_]|\.(?!\s))+)(?=[\s,]|$)

請參閱工作演示

處理尾隨句號的更新版本:

(www\.([a-zA-Z0-9-_]|\.(?!\s|\.|$))+)(?=[\s,.]|$)|(http(s)?:\/\/(?!\.)([a-zA-Z0-9-_]|\.(?!\s|\.|$))+)(?=[\s,.]|$)

請參閱工作演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM