@@ -117,7 +117,7 @@ require ( | |||
gopkg.in/ini.v1 v1.61.0 | |||
gopkg.in/ldap.v3 v3.0.2 | |||
gopkg.in/yaml.v2 v2.3.0 | |||
mvdan.cc/xurls/v2 v2.1.0 | |||
mvdan.cc/xurls/v2 v2.2.0 | |||
strk.kbt.io/projects/go/libravatar v0.0.0-20191008002943-06d1c002b251 | |||
xorm.io/builder v0.3.7 | |||
xorm.io/xorm v1.0.5 |
@@ -768,6 +768,7 @@ github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6So | |||
github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= | |||
github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= | |||
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= | |||
github.com/rogpeppe/go-internal v1.5.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= | |||
github.com/rs/xid v1.2.1 h1:mhH9Nq+C1fY2l1XIpgxIiUOfNpRBYH1kKcr+qfKgjRc= | |||
github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= | |||
github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= | |||
@@ -1196,8 +1197,7 @@ honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWh | |||
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= | |||
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= | |||
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= | |||
mvdan.cc/xurls/v2 v2.1.0 h1:KaMb5GLhlcSX+e+qhbRJODnUUBvlw01jt4yrjFIHAuA= | |||
mvdan.cc/xurls/v2 v2.1.0/go.mod h1:5GrSd9rOnKOpZaji1OZLYL/yeAAtGDlo/cFe+8K5n8E= | |||
mvdan.cc/xurls/v2 v2.2.0/go.mod h1:EV1RMtya9D6G5DMYPGD8zTQzaHet6Jh8gFlRgGRJeO8= | |||
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= | |||
strk.kbt.io/projects/go/libravatar v0.0.0-20191008002943-06d1c002b251 h1:mUcz5b3FJbP5Cvdq7Khzn6J9OCUQJaBwgBkCR+MOwSs= | |||
strk.kbt.io/projects/go/libravatar v0.0.0-20191008002943-06d1c002b251/go.mod h1:FJGmPh3vz9jSos1L/F91iAgnC/aejc0wIIrF2ZwJxdY= |
@@ -954,7 +954,7 @@ gopkg.in/warnings.v0 | |||
gopkg.in/yaml.v2 | |||
# gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 | |||
gopkg.in/yaml.v3 | |||
# mvdan.cc/xurls/v2 v2.1.0 | |||
# mvdan.cc/xurls/v2 v2.2.0 | |||
## explicit | |||
mvdan.cc/xurls/v2 | |||
# strk.kbt.io/projects/go/libravatar v0.0.0-20191008002943-06d1c002b251 |
@@ -2,7 +2,7 @@ | |||
[![GoDoc](https://godoc.org/mvdan.cc/xurls?status.svg)](https://godoc.org/mvdan.cc/xurls) | |||
Extract urls from text using regular expressions. Requires Go 1.12 or later. | |||
Extract urls from text using regular expressions. Requires Go 1.13 or later. | |||
```go | |||
import "mvdan.cc/xurls/v2" | |||
@@ -18,13 +18,18 @@ func main() { | |||
} | |||
``` | |||
Note that the funcs compile regexes, so avoid calling them repeatedly. | |||
Since API is centered around [regexp.Regexp](https://golang.org/pkg/regexp/#Regexp), | |||
many other methods are available, such as finding the [byte indexes](https://golang.org/pkg/regexp/#Regexp.FindAllIndex) | |||
for all matches. | |||
Note that calling the exposed functions means compiling a regular expression, so | |||
repeated calls should be avoided. | |||
#### cmd/xurls | |||
To install the tool globally: | |||
go get mvdan.cc/xurls/cmd/xurls | |||
cd $(mktemp -d); go mod init tmp; GO111MODULE=on go get mvdan.cc/xurls/v2/cmd/xurls | |||
```shell | |||
$ echo "Do gophers live in http://golang.org?" | xurls |
@@ -1,3 +1,8 @@ | |||
module mvdan.cc/xurls/v2 | |||
go 1.13 | |||
go 1.14 | |||
require ( | |||
github.com/rogpeppe/go-internal v1.5.2 | |||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect | |||
) |
@@ -0,0 +1,12 @@ | |||
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= | |||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= | |||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= | |||
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= | |||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= | |||
github.com/rogpeppe/go-internal v1.5.2 h1:qLvObTrvO/XRCqmkKxUlOBc48bI3efyDuAZe25QiF0w= | |||
github.com/rogpeppe/go-internal v1.5.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= | |||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | |||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= | |||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | |||
gopkg.in/errgo.v2 v2.1.0 h1:0vLT13EuvQ0hNvakwLuFZ/jYrLp5F3kcWHXdRggjCE8= | |||
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= |
@@ -66,6 +66,7 @@ var Schemes = []string{ | |||
`dpp`, | |||
`drm`, | |||
`drop`, | |||
`dtmi`, | |||
`dtn`, | |||
`dvb`, | |||
`ed2k`, | |||
@@ -226,6 +227,7 @@ var Schemes = []string{ | |||
`pack`, | |||
`palm`, | |||
`paparazzi`, | |||
`payment`, | |||
`payto`, | |||
`pkcs11`, | |||
`platform`, | |||
@@ -238,6 +240,7 @@ var Schemes = []string{ | |||
`pttp`, | |||
`qb`, | |||
`query`, | |||
`quic-transport`, | |||
`redis`, | |||
`rediss`, | |||
`reload`, |
@@ -57,6 +57,7 @@ var TLDs = []string{ | |||
`alsace`, | |||
`alstom`, | |||
`am`, | |||
`amazon`, | |||
`americanexpress`, | |||
`americanfamily`, | |||
`amex`, | |||
@@ -219,7 +220,6 @@ var TLDs = []string{ | |||
`career`, | |||
`careers`, | |||
`cars`, | |||
`cartier`, | |||
`casa`, | |||
`case`, | |||
`caseih`, | |||
@@ -252,7 +252,6 @@ var TLDs = []string{ | |||
`chintai`, | |||
`christmas`, | |||
`chrome`, | |||
`chrysler`, | |||
`church`, | |||
`ci`, | |||
`cipriani`, | |||
@@ -366,7 +365,6 @@ var TLDs = []string{ | |||
`do`, | |||
`docs`, | |||
`doctor`, | |||
`dodge`, | |||
`dog`, | |||
`domains`, | |||
`dot`, | |||
@@ -411,7 +409,6 @@ var TLDs = []string{ | |||
`eurovision`, | |||
`eus`, | |||
`events`, | |||
`everbank`, | |||
`exchange`, | |||
`expert`, | |||
`exposed`, | |||
@@ -701,12 +698,10 @@ var TLDs = []string{ | |||
`kz`, | |||
`la`, | |||
`lacaixa`, | |||
`ladbrokes`, | |||
`lamborghini`, | |||
`lamer`, | |||
`lancaster`, | |||
`lancia`, | |||
`lancome`, | |||
`land`, | |||
`landrover`, | |||
`lanxess`, | |||
@@ -727,7 +722,6 @@ var TLDs = []string{ | |||
`lexus`, | |||
`lgbt`, | |||
`li`, | |||
`liaison`, | |||
`lidl`, | |||
`life`, | |||
`lifeinsurance`, | |||
@@ -829,7 +823,6 @@ var TLDs = []string{ | |||
`monash`, | |||
`money`, | |||
`monster`, | |||
`mopar`, | |||
`mormon`, | |||
`mortgage`, | |||
`moscow`, | |||
@@ -837,7 +830,6 @@ var TLDs = []string{ | |||
`motorcycles`, | |||
`mov`, | |||
`movie`, | |||
`movistar`, | |||
`mp`, | |||
`mq`, | |||
`mr`, | |||
@@ -856,7 +848,6 @@ var TLDs = []string{ | |||
`mz`, | |||
`na`, | |||
`nab`, | |||
`nadex`, | |||
`nagoya`, | |||
`name`, | |||
`nationwide`, | |||
@@ -958,7 +949,6 @@ var TLDs = []string{ | |||
`photography`, | |||
`photos`, | |||
`physio`, | |||
`piaget`, | |||
`pics`, | |||
`pictet`, | |||
`pictures`, | |||
@@ -1154,13 +1144,13 @@ var TLDs = []string{ | |||
`song`, | |||
`sony`, | |||
`soy`, | |||
`spa`, | |||
`space`, | |||
`sport`, | |||
`spot`, | |||
`spreadbetting`, | |||
`sr`, | |||
`srl`, | |||
`srt`, | |||
`ss`, | |||
`st`, | |||
`stada`, | |||
@@ -1213,7 +1203,6 @@ var TLDs = []string{ | |||
`tech`, | |||
`technology`, | |||
`tel`, | |||
`telefonica`, | |||
`temasek`, | |||
`tennis`, | |||
`teva`, | |||
@@ -1273,7 +1262,6 @@ var TLDs = []string{ | |||
`ua`, | |||
`ubank`, | |||
`ubs`, | |||
`uconnect`, | |||
`ug`, | |||
`uk`, | |||
`unicom`, | |||
@@ -1309,7 +1297,6 @@ var TLDs = []string{ | |||
`virgin`, | |||
`visa`, | |||
`vision`, | |||
`vistaprint`, | |||
`viva`, | |||
`vivo`, | |||
`vlaanderen`, | |||
@@ -1328,7 +1315,6 @@ var TLDs = []string{ | |||
`walter`, | |||
`wang`, | |||
`wanggou`, | |||
`warman`, | |||
`watch`, | |||
`watches`, | |||
`weather`, | |||
@@ -1388,6 +1374,7 @@ var TLDs = []string{ | |||
`zuerich`, | |||
`zw`, | |||
`ελ`, | |||
`ευ`, | |||
`бг`, | |||
`бел`, | |||
`дети`, | |||
@@ -1469,6 +1456,7 @@ var TLDs = []string{ | |||
`ไทย`, | |||
`გე`, | |||
`みんな`, | |||
`アマゾン`, | |||
`クラウド`, | |||
`グーグル`, | |||
`コム`, | |||
@@ -1481,6 +1469,7 @@ var TLDs = []string{ | |||
`中国`, | |||
`中國`, | |||
`中文网`, | |||
`亚马逊`, | |||
`企业`, | |||
`佛山`, | |||
`信息`, | |||
@@ -1501,7 +1490,6 @@ var TLDs = []string{ | |||
`天主教`, | |||
`娱乐`, | |||
`家電`, | |||
`工行`, | |||
`广东`, | |||
`微博`, | |||
`慈善`, |
@@ -19,7 +19,7 @@ const ( | |||
iriChar = letter + mark + number | |||
currency = `\p{Sc}` | |||
otherSymb = `\p{So}` | |||
endChar = iriChar + `/\-+&~%=#` + currency + otherSymb | |||
endChar = iriChar + `/\-_+&~%=#` + currency + otherSymb | |||
otherPunc = `\p{Po}` | |||
midChar = endChar + "_*" + otherPunc | |||
wellParen = `\([` + midChar + `]*(\([` + midChar + `]*\)[` + midChar + `]*)*\)` | |||
@@ -76,7 +76,7 @@ func relaxedExp() string { | |||
knownTLDs := anyOf(append(TLDs, PseudoTLDs...)...) | |||
site := domain + `(?i)(` + punycode + `|` + knownTLDs + `)(?-i)` | |||
hostName := `(` + site + `|` + ipAddr + `)` | |||
webURL := hostName + port + `(/|/` + pathCont + `?|\b|(?m)$)` | |||
webURL := hostName + port + `(/|/` + pathCont + `)?` | |||
return strictExp() + `|` + webURL | |||
} | |||