亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 編程 > Regex > 正文

SqlParser 一個(gè)利用正則表達(dá)式解析單句SQL的類

2020-03-22 19:28:39
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
先看要解析的樣例SQL語(yǔ)句:
復(fù)制代碼 代碼如下:
select * from dual
SELECT * frOm dual
Select C1,c2 From tb
select c1,c2 from tb
select count(*) from t1
select c1,c2,c3 from t1 where condi1=1
Select c1,c2,c3 From t1 Where condi1=1
select c1,c2,c3 from t1,t2 where condi3=3 or condi4=5 order by o1,o2
Select c1,c2,c3 from t1,t2 Where condi3=3 or condi4=5 Order by o1,o2
select c1,c2,c3 from t1,t2,t3 where condi1=5 and condi6=6 or condi7=7 group by g1,g2
Select c1,c2,c3 From t1,t2,t3 Where condi1=5 and condi6=6 or condi7=7 Group by g1,g2
Select c1,c2,c3 From t1,t2,t3 Where condi1=5 and condi6=6 or condi7=7 Group by g1,g2,g3 order by g2,g3

解析效果之一(isSingleLine=false):
復(fù)制代碼 代碼如下:
原SQL為select * from dual
解析后的SQL為
select
*
from
dual
原SQL為SELECT * frOm dual
解析后的SQL為
select
*
from
dual
原SQL為Select C1,c2 From tb
解析后的SQL為
select
C1,c2
from
tb
原SQL為select c1,c2 from tb
解析后的SQL為
select
c1,c2
from
tb
原SQL為select count(*) from t1
解析后的SQL為
select
count(*)
from
t1
原SQL為select c1,c2,c3 from t1 where condi1=1
解析后的SQL為
select
c1,c2,c3
from
t1
where
condi1=1
原SQL為Select c1,c2,c3 From t1 Where condi1=1
解析后的SQL為
select
c1,c2,c3
from
t1
where
condi1=1
原SQL為select c1,c2,c3 from t1,t2 where condi3=3 or condi4=5 order by o1,o2
解析后的SQL為
select
c1,c2,c3
from
t1,t2
where
condi3=3 or condi4=5
order by
o1,o2
原SQL為Select c1,c2,c3 from t1,t2 Where condi3=3 or condi4=5 Order by o1,o2
解析后的SQL為
select
c1,c2,c3
from
t1,t2
where
condi3=3 or condi4=5
order by
o1,o2
原SQL為select c1,c2,c3 from t1,t2,t3 where condi1=5 and condi6=6 or condi7=7 group by g1,g2
解析后的SQL為
select
c1,c2,c3
from
t1,t2,t3
where
condi1=5 and condi6=6 or condi7=7
group by
g1,g2
原SQL為Select c1,c2,c3 From t1,t2,t3 Where condi1=5 and condi6=6 or condi7=7 Group by g1,g2
解析后的SQL為
select
c1,c2,c3
from
t1,t2,t3
where
condi1=5 and condi6=6 or condi7=7
group by
g1,g2
原SQL為Select c1,c2,c3 From t1,t2,t3 Where condi1=5 and condi6=6 or condi7=7 Group by g1,g2,g3 order by g2,g3
解析后的SQL為
select
c1,c2,c3
from
t1,t2,t3
where
condi1=5 and condi6=6 or condi7=7
group by
g1,g2,g3
order by
g2,g3

解析效果之二(isSingleLine=true):
復(fù)制代碼 代碼如下:
原SQL為select * from dual
解析后的SQL為
select
*
from
dual
原SQL為SELECT * frOm dual
解析后的SQL為
select
*
from
dual
原SQL為Select C1,c2 From tb
解析后的SQL為
select
C1,
c2
from
tb
原SQL為select c1,c2 from tb
解析后的SQL為
select
c1,
c2
from
tb
原SQL為select count(*) from t1
解析后的SQL為
select
count(*)
from
t1
原SQL為select c1,c2,c3 from t1 where condi1=1
解析后的SQL為
select
c1,
c2,
c3
from
t1
where
condi1=1
原SQL為Select c1,c2,c3 From t1 Where condi1=1
解析后的SQL為
select
c1,
c2,
c3
from
t1
where
condi1=1
原SQL為select c1,c2,c3 from t1,t2 where condi3=3 or condi4=5 order by o1,o2
解析后的SQL為
select
c1,
c2,
c3
from
t1,
t2
where
condi3=3 or
condi4=5
order by
o1,
o2
原SQL為Select c1,c2,c3 from t1,t2 Where condi3=3 or condi4=5 Order by o1,o2
解析后的SQL為
select
c1,
c2,
c3
from
t1,
t2
where
condi3=3 or
condi4=5
order by
o1,
o2
原SQL為select c1,c2,c3 from t1,t2,t3 where condi1=5 and condi6=6 or condi7=7 group by g1,g2
解析后的SQL為
select
c1,
c2,
c3
from
t1,
t2,
t3
where
condi1=5 and
condi6=6 or
condi7=7
group by
g1,
g2
原SQL為Select c1,c2,c3 From t1,t2,t3 Where condi1=5 and condi6=6 or condi7=7 Group by g1,g2
解析后的SQL為
select
c1,
c2,
c3
from
t1,
t2,
t3
where
condi1=5 and
condi6=6 or
condi7=7
group by
g1,
g2
原SQL為Select c1,c2,c3 From t1,t2,t3 Where condi1=5 and condi6=6 or condi7=7 Group by g1,g2,g3 order by g2,g3
解析后的SQL為
select
c1,
c2,
c3
from
t1,
t2,
t3
where
condi1=5 and
condi6=6 or
condi7=7
group by
g1,
g2,
g3
order by
g2,
g3

使用的類SqlParser,你可以拷貝下來(lái)使用之:
復(fù)制代碼 代碼如下:
package com.sitinspring.common.sqlFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* SQL語(yǔ)句解析器類
* @author: sitinspring(junglesong@gmail.com)
* @date: 2008-3-12
*/
html' target='_blank'>public class SqlParser{
/**
* 逗號(hào)
*/
private static final String Comma = ",";
/**
* 四個(gè)空格
*/
private static final String FourSpace = " ";
/**
* 是否單行顯示字段,表,條件的標(biāo)識(shí)量
*/
private static boolean isSingleLine=true;
/**
* 待解析的SQL語(yǔ)句
*/
private String sql;
/**
* SQL中選擇的列
*/
private String cols;
/**
* SQL中查找的表
*/
private String tables;
/**
* 查找條件
*/
private String conditions;
/**
* Group By的字段
*/
private String groupCols;
/**
* Order by的字段
*/
private String orderCols;
/**
* 構(gòu)造函數(shù)
* 功能:傳入構(gòu)造函數(shù),解析成字段,表,條件等
* @param sql:傳入的SQL語(yǔ)句
*/
public SqlParser(String sql){
this.sql=sql.trim();
parseCols();
parseTables();
parseConditions();
parseGroupCols();
parseOrderCols();
}
/**
* 解析選擇的列
*
*/
private void parseCols(){
String regex="(select)(.+)(from)";
cols=getMatchedString(regex,sql);
}
/**
* 解析選擇的表
*
*/
private void parseTables(){
String regex="";
if(isContains(sql,"http://s+where//s+")){
regex="(from)(.+)(where)";
}
else{
regex="(from)(.+)($)";
}
tables=getMatchedString(regex,sql);
}
/**
* 解析查找條件
*
*/
private void parseConditions(){
String regex="";
if(isContains(sql,"http://s+where//s+")){
// 包括Where,有條件
if(isContains(sql,"group//s+by")){
// 條件在where和group by之間
regex="(where)(.+)(group//s+by)";
}
else if(isContains(sql,"order//s+by")){
// 條件在where和order by之間
regex="(where)(.+)(order//s+by)";
}
else{
// 條件在where到字符串末尾
regex="(where)(.+)($)";
}
}
else{
// 不包括where則條件無(wú)從談起,返回即可
return;
}
conditions=getMatchedString(regex,sql);
}
/**
* 解析GroupBy的字段
*
*/
private void parseGroupCols(){
String regex="";
if(isContains(sql,"group//s+by")){
// 包括GroupBy,有分組字段
if(isContains(sql,"order//s+by")){
// group by 后有order by
regex="(group//s+by)(.+)(order//s+by)";
}
else{
// group by 后無(wú)order by
regex="(group//s+by)(.+)($)";
}
}
else{
// 不包括GroupBy則分組字段無(wú)從談起,返回即可
return;
}
groupCols=getMatchedString(regex,sql);
}
/**
* 解析OrderBy的字段
*
*/
private void parseOrderCols(){
String regex="";
if(isContains(sql,"order//s+by")){
// 包括GroupBy,有分組字段
regex="(order//s+by)(.+)($)";
}
else{
// 不包括GroupBy則分組字段無(wú)從談起,返回即可
return;
}
orderCols=getMatchedString(regex,sql);
}
/**
* 從文本text中找到regex首次匹配的字符串,不區(qū)分大小寫(xiě)
* @param regex: 正則表達(dá)式
* @param text:欲查找的字符串
* @return regex首次匹配的字符串,如未匹配返回空
*/
private static String getMatchedString(String regex,String text){
Pattern pattern=Pattern.compile(regex,Pattern.CASE_INSENSITIVE);
Matcher matcher=pattern.matcher(text);
while(matcher.find()){
return matcher.group(2);
}
return null;
}
/**
* 看word是否在lineText中存在,支持正則表達(dá)式
* @param lineText
* @param word
* @return
*/
private static boolean isContains(String lineText,String word){
Pattern pattern=Pattern.compile(word,Pattern.CASE_INSENSITIVE);
Matcher matcher=pattern.matcher(lineText);
return matcher.find();
}
public String toString(){
// 無(wú)法解析則原樣返回
if(cols==null && tables==null && conditions==null && groupCols==null && orderCols==null ){
return sql;
}
StringBuffer sb=new StringBuffer();
sb.append("原SQL為"+sql+"/n");
sb.append("解析后的SQL為/n");
for(String str:getParsedSqlList()){
sb.append(str);
}
sb.append("/n");
return sb.toString();
}
/**
* 在分隔符后加上回車(chē)
* @param str
* @param splitStr
* @return
*/
private static String getAddEnterStr(String str,String splitStr){
Pattern p = Pattern.compile(splitStr,Pattern.CASE_INSENSITIVE);
// 用Pattern類的matcher()方法生成一個(gè)Matcher對(duì)象
Matcher m = p.matcher(str);
StringBuffer sb = new StringBuffer();
// 使用find()方法查找第一個(gè)匹配的對(duì)象
boolean result = m.find();
// 使用循環(huán)找出模式匹配的內(nèi)容替換之,再將內(nèi)容加到sb里
while (result) {
m.appendReplacement(sb, m.group(0) + "/n ");
result = m.find();
}
// 最后調(diào)用appendTail()方法將最后一次匹配后的剩余字符串加到sb里;
m.appendTail(sb);
return FourSpace+sb.toString();
}
/**
* 取得解析的SQL字符串列表
* @return
*/
public List String getParsedSqlList(){
List String sqlList=new ArrayList String
// 無(wú)法解析則原樣返回
if(cols==null && tables==null && conditions==null && groupCols==null && orderCols==null ){
sqlList.add(sql);
return sqlList;
}
if(cols!=null){
sqlList.add("select/n");
if(isSingleLine){
sqlList.add(getAddEnterStr(cols,Comma));
}
else{
sqlList.add(FourSpace+cols);
}
}
if(tables!=null){
sqlList.add(" /nfrom/n");
if(isSingleLine){
sqlList.add(getAddEnterStr(tables,Comma));
}
else{
sqlList.add(FourSpace+tables);
}
}
if(conditions!=null){
sqlList.add(" /nwhere/n");
if(isSingleLine){
sqlList.add(getAddEnterStr(conditions,"(and|or)"));
}
else{
sqlList.add(FourSpace+conditions);
}
}
if(groupCols!=null){
sqlList.add(" /ngroup by/n");
if(isSingleLine){
sqlList.add(getAddEnterStr(groupCols,Comma));
}
else{
sqlList.add(FourSpace+groupCols);
}
}
if(orderCols!=null){
sqlList.add(" /norder by/n");
if(isSingleLine){
sqlList.add(getAddEnterStr(orderCols,Comma));
}
else{
sqlList.add(FourSpace+orderCols);
}
}
return sqlList;
}
/**
* 設(shè)置是否單行顯示表,字段,條件等
* @param isSingleLine
*/
public static void setSingleLine(boolean isSingleLine) {
SqlParser.isSingleLine = isSingleLine;
}
/**
* 測(cè)試
* @param args
*/
public static void main(String[] args){
List String ls=new ArrayList String
ls.add("select * from dual");
ls.add("SELECT * frOm dual");
ls.add("Select C1,c2 From tb");
ls.add("select c1,c2 from tb");
ls.add("select count(*) from t1");
ls.add("select c1,c2,c3 from t1 where condi1=1 ");
ls.add("Select c1,c2,c3 From t1 Where condi1=1 ");
ls.add("select c1,c2,c3 from t1,t2 where condi3=3 or condi4=5 order by o1,o2");
ls.add("Select c1,c2,c3 from t1,t2 Where condi3=3 or condi4=5 Order by o1,o2");
ls.add("select c1,c2,c3 from t1,t2,t3 where condi1=5 and condi6=6 or condi7=7 group by g1,g2");
ls.add("Select c1,c2,c3 From t1,t2,t3 Where condi1=5 and condi6=6 or condi7=7 Group by g1,g2");
ls.add("Select c1,c2,c3 From t1,t2,t3 Where condi1=5 and condi6=6 or condi7=7 Group by g1,g2,g3 order by g2,g3");
for(String sql:ls){
System.out.println(new SqlParser(sql));
//System.out.println(sql);
}
}
}
PHP教程

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
97精品人妻一区二区三区在线| 中日韩在线观看视频| www.日本在线观看| 免费精品99久久国产综合精品| 国产一区二区三区免费在线| 亚洲一区在线观看视频| 青青在线精品| 国产日韩视频在线播放| 久久免费视频在线观看| 97超碰国产精品女人人人爽| 亚洲精品大尺度| 日韩在线不卡一区| 九色porny视频国产网曝| 欧美激情视频在线观看| 国产亚洲精品码| 国产视频不卡一区| 亚洲h动漫在线| 粉嫩一区二区三区在线看| 国产精品视频资源| 亚洲一二三区视频| 欧美日韩福利| 日本精品免费一区二区三区| 国产福利资源一区| zzzwww在线看片免费| 欧美国产日韩另类| 国产精品18p| 日韩成人午夜| 久久久久久久伊人| 亚洲欧美精品一区| 国产91色在线免费| 三级网在线观看| 黑人巨茎大战欧美白妇| 538任你躁精品视频网免费| 国产精品欧美一级免费| 亚洲大尺度美女在线| 日韩av片免费观看| 亚洲国产精品一区二区久久hs| 影音先锋资源av| 国产精品美女999| 国产91精品免费| 久久精品最新地址| 日韩午夜在线影院| 性欧美xxxx大乳国产app| 96精品久久久久中文字幕| 草草视频在线| 国产毛片av| 涩涩网在线视频| 亚洲色图欧美视频| 9自拍视频在线观看| 天堂在线观看一卡二卡三卡四卡| 高清国产在线一区| 凹凸成人精品亚洲精品密奴| 成a人片在线观看| 亚洲人成电影在线| 九九精品九九| 中文字幕无线码一区| 99国产精品久久久久99打野战| 日本黄色大片在线观看| 一级特黄a大片免费| 国产精品视频一区二区在线观看| 性色一区二区三区| 亚洲国产一区二区在线| 欧美日韩免费高清一区色橹橹| 国产大片一区| 国产欧美一区二区精品久久久| 精品国产乱码久久久久酒店| wwww在线观看免费视频| 久久人妻精品白浆国产| 免费短视频成人日韩| 欧美做爰爽爽爽爽爽爽| 亚洲最大成人在线观看| 97久久超碰精品国产| 久久夜夜操妹子| 国产盗摄精品一区二区酒店| 国产性天天综合网| 日韩电影在线观看永久视频免费网站| 五月婷婷在线观看| 亚洲xxxx在线| 成人在线观看黄| 欧美v在线观看| 精品欧美一区二区久久久伦| 最新国产黄色网址| 久久99精品国产麻豆婷婷| 久久精品国产99国产精品澳门| 1024手机在线视频| 毛片在线导航| 四虎4hu新地址入口2023| 国产性70yerg老太| 色中色在线视频| 涩涩漫画在线观看| 黄色片在线看| 久久久国产精品午夜一区ai换脸| 亚洲一区二区三区爽爽爽爽爽| 国产三级在线播放| 国产成+人+日韩+欧美+亚洲| 538在线精品| 国产三级精品网站| 岛国毛片在线播放| 成人勉费视频| h片在线免费观看| 另类中文字幕国产精品| 日韩欧美在线一区二区三区| 国产精品igao激情视频| 国产视频青青| 91av在线看| 手机看片福利在线观看| 欧美黑人3p| 亚洲国产成人一区二区三区| 亚洲视频久久久| 久久久久久久尹人综合网亚洲| 五月天综合在线| 3d性欧美动漫精品xxxx软件| 亚洲人精选亚洲人成在线| 国内一区二区三区精品视频| 99国产一区| 成人影院久久久久久影院| 福利视频导航网| 国产夫妻自拍一区| 欧美黄色一级视频| 国产精品丝袜久久久久久高清| 蜜桃视频在线观看网站| 成年免费视频| 欧美大尺度做爰床戏| zjzjzjzjzj亚洲女人| 亚洲一区电影在线观看| 久久久久久久久久国产| 国产免费福利| 欧美性色综合网| 精品国产91亚洲一区二区三区www| 午夜精品久久99蜜桃的功能介绍| 亚洲成人1234| 五月婷婷激情网| 国语自产精品视频在线看抢先版结局| 中文字幕中文字幕中文字幕亚洲无线| 91黄色在线视频| 国产精品国产三级国产普通话蜜臀| 国产精品亚洲四区在线观看| 麻豆国产欧美一区二区三区| 精品成人免费视频| 天天干视频在线| 日韩大片在线观看视频| a级片免费视频| 亚洲一级片网站| 先锋成人av| yes4444视频在线观看| 久久久久免费看| 污香蕉视频在线观看| 九九**精品视频免费播放| 天堂av在线播放| 国产精品久久久久久久久毛片| 欧美乱妇视频| 亚洲精品理论片| 婷婷久久五月天| 色综合狠狠操| 黄色av一区二区| 久久视频免费| 欧美日韩精品是欧美日韩精品| 色悠悠亚洲一区二区| 欧美伊久线香蕉线新在线| 成人自拍小视频| 97在线观看免费高| 精品免费视频一卡2卡三卡4卡不卡| 欧美变态另类刺激| 成人情趣视频网站| 欧美另类99xxxxx| 91成品视频入口| 91精品国产aⅴ一区二区| 91精品欧美福利在线观看| 国产99在线 | 亚洲| 亚洲专区中文字幕| jizzjizzji欧美| 这里只有久久精品| 亚洲毛片在线免费观看| 国产乱码精品一区二区三区忘忧草| www.555国产精品免费| 国产精品一区二区女厕厕| 日本免费高清视频| 多人欧美交性姿势| 美女爆乳18禁www久久久久久| 日韩视频在线播放| 欧美劲爆第一页| 日韩在线不卡av| 成人三级av在线| 熟妇高潮一区二区三区| 在线不卡欧美精品一区二区三区| 精品乱子伦一区二区三区| 久久中国妇女中文字幕| 黄色影视在线观看| 成年人在线播放| 欧美日本亚洲韩国国产| 亚洲欧美一区二区精品久久久| 欧美精品日韩三级| 欧美综合另类| 国产日韩欧美一区二区东京热| 亚洲欧美一区二区三区在线观看| 亚洲三级小视频| 超碰成人福利| 日韩在线视频免费观看高清中文| 日韩精品一区二区三区中文精品| 国产九九在线| 性xxxx搡xxxxx搡欧美| 天天看天天操| 国产精品视频一区二区图片| 亚洲成a人v欧美综合天堂麻豆| 亚洲深夜福利| 日韩在线影院| 不卡av电影院| 久久久国内精品| 成午夜精品一区二区三区软件| 亚洲欧美综合在线观看| 亚洲精品一区二区三区99| aa在线观看视频| 天堂av在线播放| 日本一区二区三区高清不卡| 国产精品极品美女粉嫩高清在线| www.亚洲精品| 欧美三级日本三级| 欧美18—19性高清hd4k| 年下总裁被打光屁股sp| 久久久xxx| 精品久久久久久亚洲精品| 激情综合网av| 日韩一级免费| 国产精品黄色影片导航在线观看| 午夜神马福利影院| 午夜激情影院| blacked蜜桃精品一区| 人人妻人人澡人人爽欧美一区| 久久精品国产网站| 精品国产一区二区三区久久久樱花| 日本丰满少妇做爰爽爽| 亚洲综合日韩中文字幕v在线| 国产一二三区在线视频| 欧美xxxx×黑人性爽| 免费观看视频www| 青青视频在线免费观看| 国产精品嫩草99av在线| 亚洲婷婷在线视频| av动漫免费观看| 一区二区三区回区在观看免费视频| 综合在线观看色| 一区二区三区免费在线观看视频| 日本最新一区二区三区视频观看| 国产美女被遭强高潮免费网站| 亚洲精品456在线播放狼人| 亚洲日本丝袜连裤袜办公室| 美乳美女在线观看香蕉| 国内自拍九色| a级毛片免费观看在线| 伊人久久大香线蕉av超碰| 美女啪啪无遮挡| 欧美少妇一区| 国产一区二区不卡视频| 欧美一区二区三区四区在线观看| 亚洲 精品 综合 精品 自拍| 欧美激情视频网| 国产导航在线| 一个人看的视频www在线观看免费| 91久久国产婷婷一区二区| 久久综合成人| 欧美 丝袜 自拍 制服 另类| 91tv亚洲精品香蕉国产一区| 亚洲欧洲在线一区| 日韩欧美国产成人精品免费| 久久精品国产亚洲高清剧情介绍| 蜜桃av麻豆av天美av免费| 久久综合伊人77777麻豆最新章节| 好男人中文字幕官网| 色爱区综合激月婷婷| 麻豆精品一区二区三区视频| 国产最新在线| 久久精品视频播放| 国产人伦精品一区二区| 91亚洲午夜精品久久久久久| 97精品国产福利一区二区三区| 手机在线观看av网站| av色资源站| 国产精品免费一区二区三区都可以| 色婷婷综合久色| 免费黄色在线网站| 色综合久久久久无码专区| 波多野结衣综合网| 国产一区二区不卡| 69精品视频| 国产对白在线| 午夜不卡av在线| 国产成人久久婷婷精品流白浆| 在线免费国产| 99久久免费精品国产72精品九九| 欧美日韩中文国产| 小次郎av收藏家| 精品国产乱码久久久久久免费| 最新中文字幕日本| 日韩88av| 给我看免费高清在线观看| 日本韩国欧美超级黄在线观看| 一区二区三区成人精品| 黑人一区二区三区| 人人澡人一摸人人添| 亚洲图区在线| 久久99精品波多结衣一区| 色诱女教师一区二区三区| 1区2区在线观看| 91久久精品在线| 国产在线精品一区二区中文| 国产深喉视频一区二区| 婷婷综合五月| 日韩电影免费观看高清完整版在线观看| 日韩国产精品一区二区| 在线观看老湿视频福利| 久久精品成人欧美大片免费| 亚洲啊v在线观看| 亚洲а∨天堂久久精品9966| 欧美性大战久久久久久久| 一区二区三区区四区播放视频在线观看| 日本va欧美va精品发布| 黑人一区二区三区四区五区| 久久女同互慰一区二区三区| 一区二区在线播放视频| 国产裸舞福利在线视频合集| 精品国产一区二区三区久久久| 51精品视频一区二区三区| 午夜时刻免费入口| 欧洲成人一区二区三区| 精品欧美一区二区三区久久久| 久久精品国产亚洲777| 精品少妇人妻一区二区黑料社区| 国产在线播放一区二区三区|