找回密码
 加入
搜索
查看: 5249|回复: 17

[系统综合] sqlite语法,正则替换引号

  [复制链接]
发表于 2018-9-4 17:48:50 | 显示全部楼层 |阅读模式
本帖最后由 heavenm 于 2018-9-4 18:05 编辑
Func _SQLiteEx_string($__str)
        If StringRegExp($__str, '\^') Then
                $__str = StringRegExpReplace($__str, '\^', '') ;处理引号
        Else
                $__str = StringRegExpReplace($__str, '(?m)[' & "'" & '"]*([^,=\v\s' & "'" & '"]+)[' & "'" & '"]*', '"\1"') ;(?m)['"]*([^,=\v'"]+)['"]*处理引号
        EndIf
        Return $__str
EndFunc   ;==>_SQLiteEx_string

SQLITE语句
SELECT "productSkuKey","productSkuName" FROM "default"<span style="white-space:pre">        </span> WHERE "productBrand" = "4"

有时候为了懒会全部不写引号,但是会出错
SELECT productSkuKey,productSkuName FROM default  WHERE productBrand = 4
正则替换语句:(?im)['"]*([^,=\v\s'"]+)['"]* 替换成"\1"
现在有个问题,WHERE这种关键字不需要添加引号怎么办?

 楼主| 发表于 2018-9-4 17:56:54 | 显示全部楼层
突然感觉这个功能好像没太大必要
 楼主| 发表于 2018-9-4 18:08:04 | 显示全部楼层
不过查询表多的时候感觉还是很有必要的,好麻烦!
### 友情提示:本脚本由 Au3.REHelper 于 2018/09/04 18:07 自动生成,不保证其正确性,请自行测试 ###
Local $sSource = '"WHERE"'
;~MsgBox(0, '源字符串', $sSource)
Local $sSRERe = StringRegExpReplace($sSource, '"WHERE"', 'WHERE')
MsgBox(0, '替换结果', $sSRERe)
最简单的方法就是直接替换好了!
发表于 2018-9-4 22:00:45 | 显示全部楼层
heavenm 发表于 2018-9-4 18:08
不过查询表多的时候感觉还是很有必要的,好麻烦!

最简单的方法就是直接替换好了!

老實說 完全看不懂這個要幹嘛??

SQLLITE 的語法 不就是SQL語法  為何要替換引號??

你說的是 單引號嗎??

SELECT * FROM DB Where NAME='LEE'  

查找 姓名 是 LEE 的人
這樣完全不需要替換引號阿???
发表于 2018-9-4 22:17:58 | 显示全部楼层
研究的太深了,我只能看着大神
 楼主| 发表于 2018-9-4 23:25:00 | 显示全部楼层
本帖最后由 heavenm 于 2018-9-4 23:28 编辑
kk_lee69 发表于 2018-9-4 22:00
老實說 完全看不懂這個要幹嘛??

SQLLITE 的語法 不就是SQL語法  為何要替換引號??

因为表太多了

SELECT "A","B","C"........................................................................"Z" FROM "default" WHERE "productBrand" = "4"
有时候要加太多引号了,我简化了SQLITE查询,这样子查询比较方便!

_SQLiteEx_Query($proxyDB, 'default.productSkuKey,productSkuName,C,D,E', 'WHERE productBrand = 4')
Func _SQLiteEx_Query($_hdb, $_table = Null, $__expr = Null)
        Local $_sQuery, $_sResult[1], $_sTemp
        $__table = StringRegExp($_table, '[^\.]+', 3)
        Switch UBound($__table)
                Case 1
                        $_SQLiteCommand = 'SELECT * FROM ' & _SQLiteEx_string($__table[0])
                Case 2
                        $_SQLiteCommand = 'SELECT ' & _SQLiteEx_string($__table[1]) & ' FROM ' & _SQLiteEx_string($__table[0])
;~                         $_columns = StringSplit(StringRegExpReplace($__table[1], '"|' & "'", ''), ',') ;栏目
;~                         ReDim $_sResult[1][$_columns[0]]
;~                         For $_i = 1 To $_columns[0]
;~                                 $_sResult[0][$_i - 1] = $_columns[$_i]
;~                         Next
        EndSwitch
        $_SQLiteCommand = StringRegExpReplace($_SQLiteCommand, '"WHERE"', 'WHERE')
        If $__expr <> Null Then $_SQLiteCommand &= ' ' & $__expr
        ConsoleWrite($_SQLiteCommand & @CRLF)
        _SQLite_Query($_hdb, $_SQLiteCommand, $_sQuery)
        While _SQLite_FetchData($_sQuery, $_sTemp) = $SQLITE_OK
                $__columns = UBound($_sTemp) ;按返回结果定义列数
                If $__columns == 1 Then $__columns = 0
                If $__columns <> UBound($_sResult, 2) Then ReDim $_sResult[1][$__columns] ;调整数组
                _Array2D_Add($_sResult, $_sTemp)
        WEnd
        $__ArrayRows = UBound($_sResult) ;返回数组行
        If $__ArrayRows == 1 Then Return SetError(1) ;数组默认为1
        If $__columns > 1 Then
                $_sResult[0][0] = $__ArrayRows - 1
        Else
                $_sResult[0] = $__ArrayRows - 1
        EndIf
        Return $_sResult
EndFunc   ;==>_SQLiteEx_Query

 楼主| 发表于 2018-9-4 23:33:12 | 显示全部楼层
http://autoitx.com/forum.php?mod ... mp;extra=#pid704309
我把这个SQLITE简化版发出来哈,太乱了,自己将就用
发表于 2018-9-5 00:51:01 | 显示全部楼层
heavenm 发表于 2018-9-4 23:25
因为表太多了

SELECT "A","B","C"................................................................ ...

不是 我理解一下~~~

SELECT "A","B","C"........................................................................"Z" FROM "default" WHERE "productBrand" = "4"

"A"  這個是 雙引號嗎??  為什麼 SQL資料庫與法要使用雙引號??
 楼主| 发表于 2018-9-5 15:51:42 | 显示全部楼层
kk_lee69 发表于 2018-9-5 00:51
不是 我理解一下~~~

SELECT "A","B","C".......................................................... ...

因为有些时候如果是数字的话,好像必须引号起来,所以我就不管那么多,除了关键语句以外,给它全部加上引号了!
 楼主| 发表于 2018-9-5 15:53:06 | 显示全部楼层
怪我没好好认真学习数据库,就简单粗暴的全部加引号了!
发表于 2018-9-5 16:13:56 | 显示全部楼层
heavenm 发表于 2018-9-5 15:51
因为有些时候如果是数字的话,好像必须引号起来,所以我就不管那么多,除了关键语句以外,给它全部加上引号了 ...

SQL 語法 應該是 數字 不用加任何東西   文字前後加上單引號

但是我看你的引號是 雙引號吧   所以我不太能理解用途.....
 楼主| 发表于 2018-9-5 16:22:21 | 显示全部楼层
17953,R2001,4,true,2,,1,5a3381e33a32e4700f000165
### 友情提示:本脚本由 Au3.REHelper 于 2018/09/05 16:21 自动生成,不保证其正确性,请自行测试 ###
#include <Array.au3>
Local $sSource = '17953,R2001,4,true,2,,1,5a3381e33a32e4700f000165'
;~MsgBox(0, '源字符串', $sSource)
Local $aSRE = StringRegExp($sSource, '(?m)[' & "'" & '"]*([^,=\v' & "'" & '"]+)[' & "'" & '"]*', 3)
If Not @Error Then MsgBox(0, '匹配数量: ' & UBound($aSRE), '其中[0]元素为: ' & $aSRE[0])
_ArrayDisplay($aSRE, UBound($aSRE))
(?m)['"]*([^,=\v'"]+)['"]*
这条正则还有个问题,空白应该也替换成双引号
"17953","R2001","4","true","2","","1","5a3381e33a32e4700f000165"
 楼主| 发表于 2018-9-5 16:38:11 | 显示全部楼层
或者有没有什么办法
用正则实现StringSplit这个功能,把空白的字符也识别出来
 楼主| 发表于 2018-9-5 16:40:15 | 显示全部楼层
本帖最后由 heavenm 于 2018-9-5 16:41 编辑
kk_lee69 发表于 2018-9-5 16:13
SQL 語法 應該是 數字 不用加任何東西   文字前後加上單引號

但是我看你的引號是 雙引號吧   所以我不 ...

不知道,我是用在SQLITE里面的
INSERT OR IGNORE INTO 嘿嘿嘿 (id,name,brand,active,totalRecyleCount,alias,categoryId,image) VALUES (17953,R2001,4,true,2,,1,5a3381e33a32e4700f000165)
比如这句在SQLITE里面,没有引号不能运行必须加上引号
INSERT OR IGNORE INTO 嘿嘿嘿 (id,name,brand,active,totalRecyleCount,alias,categoryId,image) VALUES ("17953","R2001","4","true","2","","1","5a3381e33a32e4700f000165")

 楼主| 发表于 2018-9-5 17:04:41 | 显示全部楼层
### 友情提示:本脚本由 Au3.REHelper 于 2018/09/05 17:02 自动生成,不保证其正确性,请自行测试 ###
#include <Array.au3>
Local $sSource = '17953,R2001,4,true,2,,1,5a3381e33a32e4700f000165'
;~MsgBox(0, '源字符串', $sSource)
Local $aSRE = StringRegExp($sSource, '(.*?)(?:,|$)', 3)
If Not @Error Then MsgBox(0, '匹配数量: ' & UBound($aSRE), '其中[0]元素为: ' & $aSRE[0])
_ArrayDisplay($aSRE, UBound($aSRE))
后面会多一行出来,这个是为什么呢!感觉不合理啊
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-3-29 02:14 , Processed in 0.076454 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表