//好比找到全部的a連接 //注意匹配模式在最前面的 (?m),加了多行匹配模式後,點號不能匹配換行符 pattern := `(?msU)<a.*href="(.*)".*>(.*)</a>` reg = regexp.MustCompile(pattern) match := reg.FindAllStringSubmatch(html, -1) //FindAllStringSubmatch會將捕獲到的放到子slice if match != nil { fmt.Print("%#v", match) }
go正則:http://studygolang.com/static/pkgdoc/pkg/regexp.htm css
具體參考:https://github.com/google/re2/wiki/Syntax 這裏能夠看到不少字符含義:html
[[:alnum:]] |
alphanumeric (≡ [0-9A-Za-z] ) |
[[:alpha:]] |
alphabetic (≡ [A-Za-z] ) |
[[:ascii:]] |
ASCII (≡ [\x00-\x7F] ) |
[[:blank:]] |
blank (≡ [\t ] ) |
[[:cntrl:]] |
control (≡ [\x00-\x1F\x7F] ) |
[[:digit:]] |
digits (≡ [0-9] ) |
[[:graph:]] |
graphical (≡ [!-~] == [A-Za-z0-9!"#$%&'()*+,\-./:;<=>?@[\\\]^_ ` {|}~] ) |
[[:lower:]] |
lower case (≡ [a-z] ) |
[[:print:]] |
printable (≡ [ -~] == [ [:graph:]] ) |
[[:punct:]] |
punctuation (≡ [!-/:-@[- ` {-~] ) |
[[:space:]] |
whitespace (≡ [\t\n\v\f\r ] ) |
[[:upper:]] |
upper case (≡ [A-Z] ) |
[[:word:]] |
word characters (≡ [0-9A-Za-z_] ) |
[[:xdigit:]] |
hex digit (≡ [0-9A-Fa-f] ) |
不少用法不支持,好比反向引用,斷言什麼的jquery
正則表達式採用RE2語法(除了\c、\C),和Perl、Python等語言的正則基本一致。因此搜索看Perl或者Python看便可,好比修飾符的使用。git
前面就交代了修飾符等等,其中U修飾符是開啓非貪婪模式(即替換.*爲.*?),表達式中只須要寫 .* 便可github
go的修飾符:golang
pattern := `(?Um)...`
(re) 編號的捕獲分組 (?P<name>re) 命名並編號的捕獲分組 (?:re) 不捕獲的分組 (?flags) 設置當前所在分組的標誌,不捕獲也不匹配 (?flags:re) 設置re段的標誌,不捕獲的分組
I 大小寫敏感(默認關閉) m ^和$在匹配文本開始和結尾以外,還能夠匹配行首和行尾(默認開啓) s 讓.能夠匹配\n(默認關閉) U 非貪婪的:交換x*和x*?、x+和x+?……的含義(默認關閉)
正則基本知識:https://msdn.microsoft.com/zh-cn/library/ae5bf541(v=vs.90).aspx web
http://louiszhai.github.io/2016/06/13/regexp/正則表達式
非貪婪模式: .*?ui
匹配模式修飾符:通常4種模式,不區分大小寫模式i,單行模式s,多行模式m,註釋模式google
注意點號沒法匹配到換行符(就算是多行匹配也不行),解決方案就是在模式修飾符中再加入s(單行模式,將換行符視爲普通字符,.號能夠匹配到),或者將 .*? 換成 [\s\S]*?
參考:http://m.oschina.net/blog/370714
goquery,讓go像jquery同樣抓取網頁: