精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

用 Go 如何實現精準統計文章字數

開發 后端
統計字數是一個很常見的需求,很多人印象最深的應該是微博早些時候限制 140 字,而且邊輸入會邊統計剩余字數。現在很多社區文章也會有字數統計的功能,而且可以依據字數來預估閱讀時間。比如 Go語言中文網就有這樣的功能。

[[377316]]

大家好,我是站長 polarisxu。

今天要聊的內容應該可以當做一道面試題,你可以先想想該怎么實現。

統計字數是一個很常見的需求,很多人印象最深的應該是微博早些時候限制 140 字,而且邊輸入會邊統計剩余字數。現在很多社區文章也會有字數統計的功能,而且可以依據字數來預估閱讀時間。比如 Go語言中文網就有這樣的功能。

01 需求分析

下手之前先分析下這個需求。從我個人經驗看,在實際面試中,針對一個面試題,你的分析過程,循序漸進的解決方案,可以很好的展示你的思考過程。正所謂分析問題、解決問題。這會給你加分的。

我們采用類似詞法分析的思路分析這個需求。

一篇文章通常包含如下元素,我們也稱之為 token:

  • 普通文字
  • 標點符號
  • 圖片
  • 鏈接(包含各種協議的鏈接)
  • 代碼

其中普通文字通常會分為歐美和中日韓(CJK),因為 CJK 屬于表意文字,和歐美字母的文字差異很大。同時這里還涉及到編碼的問題。本文假設使用 UTF-8 編碼。

對于標點符號,中文標點和英文標點也會很不一樣。

此外還有全角和半角的問題。

根據以上分析,對于該需求作如下假定:

  • 空格(包括換行)不算字數;
  • HTML 標簽需要剔除;
  • 編碼方式:假定為 UTF-8 編碼;
  • 標點符號算不算做字數。如果算,像括號這樣的按 2 個字算;
  • 鏈接怎么算?一個鏈接約定為 1 個字可能更合適,大概閱讀時只是把它當鏈接,而不太會關心鏈接由什么字母組成;
  • 圖片不算做字數,但如果計算閱讀時間,可能需要適當考慮圖片的影響;
  • 對于技術文章,代碼是最麻煩的。統計代碼字數感覺是沒多大意義的。統計代碼行數可能更有意義;

本文的解決方案針對以上的假定進行。

02 Go 語言實現

先看最簡單的。

純英文

根據以上分析,如果文章只包含普通文本且是英文,也就是說,每個字(單詞)根據空格分隔,統計是最簡單的。

  1. func TotalWords(s string) int { 
  2.  n := 0 
  3.  inWord := false 
  4.  for _, r := range s { 
  5.   wasInWord := inWord 
  6.   inWord = !unicode.IsSpace(r) 
  7.   if inWord && !wasInWord { 
  8.    n++ 
  9.   } 
  10.  } 
  11.  return n 

還有一種更簡單的方式:

  1. len(strings.Fields(s)) 

不過看 strings.Fields 的實現,性能會不如第一種方式。

回顧上面的需求分析,會發現這個實現是有 Bug 的。比如下面的例子:

  1. s1 := "Hello,playground" 
  2. s2 := "Hello, playground" 

用上面的實現,s1 的字數是 1,s2 的字數是 2。它們都忽略了標點符號。而且因為寫法的多樣性(不規范統一),導致計算字數會有誤差。所以我們需要對寫法進行規范。

規范排版

其實和寫代碼要有規范一樣,文章也是有規范的。比如出版社對于一本書的排版會有明確的規定。為了讓我們的文章看起來更舒服,也應該遵循一定的規范。

這里推薦一個 GitHub 上的排版指南:《中文文案排版指北》,它的宗旨,統一中文文案、排版的相關用法,降低團隊成員之間的溝通成本,增強網站氣質。這個規范開頭關于空格的一段話很有意思:

有研究顯示,打字的時候不喜歡在中文和英文之間加空格的人,感情路都走得很辛苦,有七成的比例會在 34 歲的時候跟自己不愛的人結婚,而其余三成的人最后只能把遺產留給自己的貓。畢竟愛情跟書寫都需要適時地留白。

建議大家可以看看這個指北,一些知名的網站就是按照這個做的。

因為 GCTT 的排版在這個規范做,但人為約束不是最好的方法,所以我開發了一個 Go 工具:https://github.com/studygolang/autocorrect,用于自動給中英文之間加入合理的空格并糾正專用名詞大小寫。

所以為了讓字數統計更準確,我們假定文章是按一定的規范書寫的。比如上面的例子,規范的寫法是 s2 := "Hello, playground"。不過這里標點不算作字數。

剛去微博上試了一下,發現微博的字數計算方式有點詭異,竟然是 9 個字。

測試一下發現,它直接把兩個英文字母算作一個字(兩個字節算一個字)。而漢字是正常的。大家可以想想微博是怎么實現的。

中英文混合

中文不像英文,單詞之間沒有空格分隔,因此開始的那兩種方式不適合。

如果是純中文,我們怎么計算字數呢?

在 Go 語言中,字符串使用 UTF-8 編碼,一個字符用 rune 表示。因此在標準庫中查找相關計算方法。

  1. func RuneCountInString(s string) (n int

這個方法能計算字符串包含的 rune(字符)數,對于純中文,就是漢字數。

  1. str := "你好世界" 
  2. fmt.Println(utf8.RuneCountInString(str)) 

以上代碼輸出 4。

然而,因為很多時候文章會中英文混合,因此我們先采用上面的純英文的處理方式,即:strings.Fields(),將文章用空格分隔,然后處理每一部分。

  1. func TotalWords(s string) int { 
  2.  wordCount := 0 
  3.    
  4.  plainWords := strings.Fields(s) 
  5.  for _, word := range plainWords { 
  6.   runeCount := utf8.RuneCountInString(word) 
  7.   if len(word) == runeCount { 
  8.    wordCount++ 
  9.   } else { 
  10.    wordCount += runeCount 
  11.   } 
  12.  } 
  13.  
  14.  return wordCount 

增加如下的測試用例:

  1. func TestTotalWords(t *testing.T) { 
  2.  tests := []struct { 
  3.   name  string 
  4.   input string 
  5.   want  int 
  6.  }{ 
  7.   {"en1""hello,playground", 2}, 
  8.   {"en2""hello, playground", 2}, 
  9.   {"cn1""你好世界", 4}, 
  10.   {"encn1""Hello你好世界", 5}, 
  11.   {"encn2""Hello 你好世界", 5}, 
  12.  } 
  13.  for _, tt := range tests { 
  14.   t.Run(tt.name, func(t *testing.T) { 
  15.    if got := wordscount.TotalWords(tt.input); got != tt.want { 
  16.     t.Errorf("TotalWords() = %v, want %v", got, tt.want) 
  17.    } 
  18.   }) 
  19.  } 

發現 en1 和 encn1 測試不通過,因為沒有按照上面說的規范書寫。因此我們通過程序增加必要的空格。

  1. // AutoSpace 自動給中英文之間加上空格 
  2. func AutoSpace(str string) string { 
  3.  out := "" 
  4.  
  5.  for _, r := range str { 
  6.   out = addSpaceAtBoundary(out, r) 
  7.  } 
  8.  
  9.  return out 
  10.  
  11. func addSpaceAtBoundary(prefix string, nextChar rune) string { 
  12.  if len(prefix) == 0 { 
  13.   return string(nextChar) 
  14.  } 
  15.  
  16.  r, size := utf8.DecodeLastRuneInString(prefix) 
  17.  if isLatin(size) != isLatin(utf8.RuneLen(nextChar)) && 
  18.   isAllowSpace(nextChar) && isAllowSpace(r) { 
  19.   return prefix + " " + string(nextChar) 
  20.  } 
  21.  
  22.  return prefix + string(nextChar) 
  23.  
  24. func isLatin(size int) bool { 
  25.  return size == 1 
  26.  
  27. func isAllowSpace(r rune) bool { 
  28.  return !unicode.IsSpace(r) && !unicode.IsPunct(r) 

這樣可以在 TotalWords 函數開頭增加 AutoSpace 進行規范化。這時結果就正常了。

處理標點和其他類型

以上例子標點沒計算在內,而且如果英文和中文標點混合在一起,情況又復雜了。

為了更好地實現開始的需求分析,重構以上代碼,設計如下的結構:

  1. type Counter struct { 
  2.  Total     int // 總字數 = Words + Puncts 
  3.  Words     int // 只包含字符數 
  4.  Puncts    int // 標點數 
  5.  Links     int // 鏈接數 
  6.  Pics      int // 圖片數 
  7.  CodeLines int // 代碼行數 

同時將 TotalWords 重構為 Counter 的 Stat 方法,同時記錄標點數:

  1. func (wc *Counter) Stat(str string) { 
  2.  wc.Links = len(rxStrict.FindAllString(str, -1)) 
  3.  wc.Pics = len(imgReg.FindAllString(str, -1)) 
  4.  
  5.  // 剔除 HTML 
  6.  str = StripHTML(str) 
  7.  
  8.  str = AutoSpace(str) 
  9.  
  10.  // 普通的鏈接去除(非 HTML 標簽鏈接) 
  11.  str = rxStrict.ReplaceAllString(str, " "
  12.  plainWords := strings.Fields(str) 
  13.  
  14.  for _, plainWord := range plainWords { 
  15.   words := strings.FieldsFunc(plainWord, func(r rune) bool { 
  16.    if unicode.IsPunct(r) { 
  17.     wc.Puncts++ 
  18.     return true 
  19.    } 
  20.    return false 
  21.   }) 
  22.  
  23.   for _, word := range words { 
  24.    runeCount := utf8.RuneCountInString(word) 
  25.    if len(word) == runeCount { 
  26.     wc.Words++ 
  27.    } else { 
  28.     wc.Words += runeCount 
  29.    } 
  30.   } 
  31.  } 
  32.  
  33.  wc.Total = wc.Words + wc.Puncts 
  34.  
  35. var ( 
  36.  rxStrict = xurls.Strict() 
  37.  imgReg   = regexp.MustCompile(`<img [^>]*>`) 
  38.  stripHTMLReplacer = strings.NewReplacer("\n"" ""</p>""\n""<br>""\n""<br />""\n"
  39.  
  40. // StripHTML accepts a string, strips out all HTML tags and returns it. 
  41. func StripHTML(s string) string { 
  42.  // Shortcut strings with no tags in them 
  43.  if !strings.ContainsAny(s, "<>") { 
  44.   return s 
  45.  } 
  46.  s = stripHTMLReplacer.Replace(s) 
  47.  
  48.  // Walk through the string removing all tags 
  49.  b := GetBuffer() 
  50.  defer PutBuffer(b) 
  51.  var inTag, isSpace, wasSpace bool 
  52.  for _, r := range s { 
  53.   if !inTag { 
  54.    isSpace = false 
  55.   } 
  56.  
  57.   switch { 
  58.   case r == '<'
  59.    inTag = true 
  60.   case r == '>'
  61.    inTag = false 
  62.   case unicode.IsSpace(r): 
  63.    isSpace = true 
  64.    fallthrough 
  65.   default
  66.    if !inTag && (!isSpace || (isSpace && !wasSpace)) { 
  67.     b.WriteRune(r) 
  68.    } 
  69.   } 
  70.  
  71.   wasSpace = isSpace 
  72.  
  73.  } 
  74.  return b.String() 

代碼過多的細節不討論。此外,關于文章內的代碼行數統計未實現(目前沒有想到特別好的方法,如果你有,歡迎交流)。

03 總結

通過本文的分析發現,精準統計字數沒那么容易,這里涉及到很多的細節。

當然,實際應用中,字數不需要那么特別精準,而且對于非正常文字(比如鏈接、代碼)怎么處理,會有不同的約定。

本文涉及到的完整代碼放在 GitHub:https://github.com/polaris1119/wordscount。

本文轉載自微信公眾號「polarisxu」,可以通過以下二維碼關注。轉載本文請聯系polarisxu公眾號。

 

責任編輯:武曉燕 來源: polarisxu
相關推薦

2024-11-12 10:09:59

Go語言第三方庫

2012-03-13 10:40:58

Google Go

2020-06-07 10:12:14

牛聯網畜牧物聯網

2025-06-04 08:40:00

Go語言鏈表

2021-04-09 20:04:34

區塊鏈Go加密

2020-03-17 10:24:12

Go語言停止寫障礙

2021-05-29 10:20:54

GoModules語言

2021-09-15 10:00:33

Go語言Modules

2018-01-15 09:49:25

Python精準分類

2022-01-04 10:25:32

Go參數加載

2017-11-16 15:25:54

Go語言算法代碼

2025-11-04 03:00:00

HoloCine開源模型Sora 2

2023-12-08 07:55:37

MySQL數據統計InnoDB

2025-02-04 09:58:08

2009-12-09 16:49:09

PHP顯示文章發布時間

2022-02-25 10:59:18

AWSGORust

2016-12-01 13:22:25

大數據扶貧國際

2021-12-09 10:45:19

分布式事務框架

2025-05-16 10:05:00

WOLGoSocket

2025-06-12 02:21:00

點贊
收藏

51CTO技術棧公眾號

亚洲自拍另类欧美丝袜| 欧美h版在线| 国产精品久久久久7777按摩| 91在线观看免费高清| 久草视频在线免费看| 日韩三区视频| 欧美美女一区二区| 妞干网在线观看视频| 国产成人天天5g影院在线观看| 免费在线观看精品| 国模精品系列视频| 精品人妻中文无码av在线| 国产免费色视频| 国产香蕉视频在线| 99久久久久国产精品| 亚洲精品久久久久久久久久久| 在线观看免费成人av| 少妇精品高潮欲妇又嫩中文字幕 | 欧美特黄一级| 亚洲网站在线看| 中国特级黄色大片| 国产精品亚洲欧美一级在线| 欧美国产日韩在线观看| 成人h视频在线观看| 中文字幕人妻精品一区| 国产日韩欧美高清免费| 欧美美最猛性xxxxxx| 99久久99久久精品免费看小说. | 欧洲美女和动交zoz0z| 欧美在线观看在线观看| 国产精品一区二区果冻传媒| 国产精品视频网址| 亚洲黄色免费观看| 一区二区动漫| 97国产suv精品一区二区62| 一起操在线播放| 青青草成人影院| 亚洲色图美腿丝袜| 永久免费看mv网站入口78| 国产精品午夜av| 亚洲精品一区二区三区福利| 人妻体体内射精一区二区| 免费av在线网址| 国产精品午夜电影| 日韩免费av一区二区三区| 亚洲欧美日韩免费| 无套内谢的新婚少妇国语播放| 亚洲影音一区| 1769国内精品视频在线播放| 国产一级片免费看| 另类春色校园亚洲| 日韩一区二区在线观看| 午夜视频在线观| 综合久久av| 欧美精品18+| 国产大片一区二区三区| 国产精品日韩精品在线播放| 欧美精品一卡二卡| 中文字幕国产高清| 日韩中文字幕无砖| 亚洲精品在线免费播放| a天堂视频在线观看| 日韩精选在线| 亚洲欧美日韩综合| 国产传媒国产传媒| 99久久夜色精品国产亚洲96| 久久精品久久久久| 久久高清无码视频| 国产一区二区三区的电影| 国产成人91久久精品| 中文字幕日本视频| 国内精品自线一区二区三区视频| 91在线看www| 丰满岳乱妇国产精品一区| av电影天堂一区二区在线| 久久狠狠久久综合桃花| 国产三级电影在线观看| 中文字幕在线观看不卡| 妞干网在线播放| yiren22亚洲综合伊人22| 国产三级一区二区| 中文字幕一区二区三区最新 | 国产乱码精品一区二区三区精东| 国产毛片一区二区| 国产一区不卡在线观看| 精品无吗乱吗av国产爱色| 国产精品视频第一区| 国产香蕉一区二区三区| 国内精彩免费自拍视频在线观看网址 | 亚洲欧洲日本韩国| 欧美日韩免费一区二区三区| 妖精视频在线观看| 免费短视频成人日韩| 久久精品久久久久| 日本中文字幕在线免费观看| 免费人成在线不卡| 国产精品加勒比| 亚洲视频tv| 精品久久久久久久久久国产 | 日韩一区二区三区四区五区 | 日本道免费精品一区二区三区| 亚洲一区二区在线视频观看| 麻豆精品av| www.亚洲一区| 日本熟女毛茸茸| 国产激情精品久久久第一区二区| 美脚丝袜一区二区三区在线观看| 久久黄色美女电影| 日本一区二区三区四区| 三级网在线观看| 欧美黑人粗大| 欧美精品一区在线观看| 特黄一区二区三区| 鲁大师成人一区二区三区| 91国产视频在线| 一区二区三区日| 91免费版在线| 成人免费在线网| 亚洲黑人在线| 中文字幕成人精品久久不卡 | 一本色道精品久久一区二区三区| 国产日韩精品在线观看| 欧美色视频免费| 亚洲国产日韩一级| 中文字幕55页| 国产精品成人av| 国产精品扒开腿做| 四虎精品在线| 亚洲第一搞黄网站| 久久无码人妻一区二区三区| 国产国产精品| 国产精品视频久久久| 欧美美乳在线| 婷婷国产v国产偷v亚洲高清| 国产ts在线观看| 中文字幕一区二区三区欧美日韩| 久久天天躁狠狠躁夜夜躁| 天天干在线播放| 99精品欧美一区二区三区小说 | 久久精品无码一区| 销魂美女一区二区三区视频在线| 国产欧美亚洲日本| 不卡的av影片| 精品国产伦理网| 日韩免费一二三区| 成人动漫在线一区| 国产日韩欧美精品在线观看| 国产伦精品一区二区三区在线播放 | 一区二区三区国产盗摄| 精品免费日产一区一区三区免费| brazzers在线观看| 亚洲第一av网站| 奇米影视第四色777| 99精品一区二区| 大肉大捧一进一出好爽视频| 日本中文字幕在线一区| 中文字幕日韩在线播放| 久久精品99北条麻妃| 亚洲国产激情av| 九色porny自拍| 在线精品自拍| 97精品欧美一区二区三区| 免费的黄色av| 色综合久久中文综合久久牛| 亚洲自拍偷拍图| 日本视频免费一区| 伊人情人网综合| 精品视频一二| 性欧美暴力猛交69hd| 日产精品久久久久久久性色| 一本在线高清不卡dvd| 精品亚洲aⅴ无码一区二区三区| 久久精品久久综合| 毛片在线视频观看| 神马香蕉久久| 国产欧美一区二区三区久久人妖| 黄视频网站在线| 精品国产乱子伦一区| 亚洲欧美偷拍一区| 中文字幕佐山爱一区二区免费| 99精品视频在线看| 欧美3p视频| 国产精品免费一区二区三区四区 | 秋霞欧美一区二区三区视频免费| 国产在线播放一区| 青青草国产精品视频| 精品大片一区二区| 亚洲aaa激情| 超碰超碰人人人人精品| 日韩网站在线观看| 欧美一级做性受免费大片免费| 欧美天天综合色影久久精品| av黄色免费在线观看| 成人一区二区三区视频| 在线免费观看av的网站| 伊人成人在线| 中文字幕一区二区三区四区五区六区| 精品福利一区| 成人欧美一区二区三区在线| 蜜桃视频www网站在线观看| 丝袜美腿亚洲一区二区| 天天操天天射天天| 欧美一级高清片在线观看| 欧美啪啪小视频| 一区二区三区精品在线| 色婷婷在线影院| 成人激情黄色小说| 亚洲第一区第二区第三区| 石原莉奈在线亚洲三区| 免费看成人午夜电影| 成人午夜888| 国产成人精品一区二区| 91老司机福利在线| 欧美成人合集magnet| 国产精品一区在线看| 亚洲精品久久久久久久久久久久| 国产精品久久久久毛片| 欧美综合一区二区三区| 一级免费在线观看| 亚洲国产视频直播| 国产在线一卡二卡| 国产福利精品一区| 777一区二区| 日韩国产精品久久久久久亚洲| 日本黑人久久| 91精品尤物| 92福利视频午夜1000合集在线观看| 欧美成a人片在线观看久| 97在线看免费观看视频在线观看| 成人日韩欧美| 久久久成人精品视频| a√资源在线| 国产一区二区三区18| 亚洲欧美综合一区二区| 亚洲高清在线观看| 欧美一区,二区| 精品国产乱码久久久久久图片 | 精品无人乱码一区二区三区| 欧美做受高潮1| 天堂av中文在线观看| 国内久久久精品| 91福利在线免费| 性色av一区二区咪爱| 超清av在线| 韩国福利视频一区| 国产社区精品视频| 欧美自拍视频在线| 欧美xo影院| 国产v综合ⅴ日韩v欧美大片| 成人免费福利| 国产精品美女网站| xxxxx.日韩| 91天堂在线观看| 精品欧美视频| 国产日韩欧美亚洲一区| 日韩伦理一区二区三区| 欧美污视频久久久| 成人激情在线| 性欧美18一19内谢| 国产一区二区三区自拍| 少妇人妻大乳在线视频| 中文亚洲免费| 国产免费视频传媒| 久久精品国产99| 性一交一黄一片| caoporen国产精品视频| 少妇按摩一区二区三区| 日本一区二区视频在线观看| 最新日韩免费视频| 夜夜嗨av一区二区三区中文字幕| 久久这里只有精品国产| 欧美视频在线观看免费网址| 欧美人一级淫片a免费播放| 欧美高清你懂得| 欧美一区,二区| 中文在线资源观看视频网站免费不卡 | 麻豆国产一区二区三区四区| 国产精品一区免费观看| 国产成人影院| 99re8这里只有精品| 亚洲日本成人| 黄色永久免费网站| 国产91丝袜在线18| 国产精品高清无码在线观看| 中文字幕亚洲一区二区av在线| 免费在线观看国产精品| 色综合久久88色综合天天| 91成品人影院| 日韩av最新在线| 毛片av在线| 18一19gay欧美视频网站| 婷婷久久免费视频| 久久99精品久久久久久水蜜桃| 成人在线免费观看网站| 97超碰在线人人| 免费看欧美美女黄的网站| 91人人澡人人爽| 国产精品免费人成网站| 国产无遮挡又黄又爽| 欧美日韩久久不卡| 艳母动漫在线看| 久久伊人精品视频| 精品成人av| 久久99精品久久久久久水蜜桃 | 国产丰满美女做爰| 亚洲精品在线视频| 午夜dj在线观看高清视频完整版| 色老头一区二区三区| 9999精品成人免费毛片在线看| 国产精品日日摸夜夜添夜夜av| 欧美成人午夜77777| www.黄色网址.com| 青椒成人免费视频| 久久人人爽人人爽人人片| 亚洲免费色视频| 毛片aaaaa| 欧美日韩视频一区二区| 偷拍自拍在线| 高清在线视频日韩欧美| 成人在线视频www| 亚洲国产精品www| 男女av一区三区二区色多| 午夜影院福利社| 樱花草国产18久久久久| 在线免费av片| 亚洲午夜精品久久久久久久久久久久| 爱搞国产精品| 高清视频一区二区三区| 亚洲色图网站| 九九九九九国产| 国产精品久久久久久久第一福利| jizz国产在线观看| 精品亚洲一区二区三区在线播放 | 国产精品男人的天堂| 久操成人av| 日韩精品无码一区二区三区免费| 日韩国产欧美在线观看| 强伦人妻一区二区三区| 大伊人狠狠躁夜夜躁av一区| 日本三级一区二区三区| 日韩国产精品一区| 天堂√中文最新版在线| 欧美不卡福利| 久久精品免费| 日本精品在线观看视频| 欧美亚一区二区| 香蕉视频免费在线播放| 成人av在线天堂| 一个色综合网| 又色又爽又黄18网站| 亚洲综合男人的天堂| 欧美视频在线观看一区二区三区| 欧美激情免费看| 久久影视三级福利片| 波多野结衣乳巨码无在线| 91麻豆国产在线观看| 国产精品免费无遮挡无码永久视频| 亚洲欧美日韩精品久久奇米色影视| 欧美日韩电影免费看| 日韩精品大片| 久久99精品久久久久久动态图 | 日本黄色大片在线观看| 亚洲一区二区三区在线| 无码精品黑人一区二区三区| 欧美一级免费视频| 欧美精品一区二区久久| 久久久久xxxx| 夜夜夜精品看看| 欧美午夜黄色| 国产在线视频91| 国自产拍偷拍福利精品免费一| 日批在线观看视频| 91成人在线观看喷潮| 日本三级在线视频| 97久久天天综合色天天综合色hd| 国模吧视频一区| 91视频在线网站| 欧美丰满美乳xxx高潮www| 变态调教一区二区三区| 欧美三日本三级少妇三99| 国产乱子伦视频一区二区三区| 国产无码精品在线观看| 一区二区亚洲精品国产| 日本一区二区三区视频在线看 | 成人在线观看免费播放| 真人做人试看60分钟免费| 91免费看片在线观看| 国产又粗又猛又爽又黄视频 | 精品免费囯产一区二区三区| 日韩在线视频网站| 福利片一区二区| 黄大色黄女片18第一次| 亚洲va欧美va天堂v国产综合| jyzzz在线观看视频| 岛国视频一区免费观看| 日韩电影在线观看电影| 精品在线视频免费观看| 色综合伊人色综合网| 伊人春色之综合网| 欧洲成人午夜精品无码区久久|