sqlite列出表所有字段,求个配套的正则
本帖最后由 heavenm 于 2019-9-13 01:27 编辑2种方法,网上一般都流传第一种方法.终于找到方法2,我觉得第二条语句好用多了
1.
PRAGMA table_info()
2.
SELECT sql FROM sqlite_master WHERE tbl_name = 'table_name' AND type = 'table'
下面这个奇怪的数据表名称可以用正则获取到正确的表名么
如果遇见奇怪的数据库名称比如 aa"a数据库查询出来的结果是 ,中间多了一个双引号
CREATE TABLE "level" (
"aa""a" TEXT,
"bb" TEXT
)### 友情提示:本脚本由 Au3.REHelper 于 2019/09/13 01:21 自动生成,不保证其正确性,请自行测试 ###
#include <Array.au3>
Local $sSource = _
'CREATE TABLE "level" (' & @CRLF & _
'"a' & "'a" & '""a" TEXT,' & @CRLF & _
'"bb" TEXT' & @CRLF & _
')'
;~MsgBox(0, '源字符串', $sSource)
Local $aSRE = StringRegExp($sSource, '"(.+)"', 3)
If Not @Error Then MsgBox(0, '匹配数量: ' & UBound($aSRE), '其中元素为: ' & $aSRE)
_ArrayDisplay($aSRE, UBound($aSRE))
{:1_197:}其实这种数据库名称应该不会出现,
可我就是突然想到了
突然好奇
然后突然想不到解法
突然觉得我是吃饱撑着了
先匹配
"((?:[^"]|"")*)"
再将连体的2引号合1 连afan都要2步,应该确实是需要2步
算了,就用一步,这种奇怪的数据表应该是不会出现的,想想如果确实要各种奇葩的元素都考虑,那要弄的情况肯定太多了,实用为先 本帖最后由 heavenm 于 2019-9-13 14:51 编辑
{:1_199:}忍不住还是动手了
### 友情提示:本脚本由 Au3.REHelper 于 2019/09/13 14:41 自动生成,不保证其正确性,请自行测试 ###
Local $sSource = _
'CREATE TABLE "test" (' & @CRLF & _
'"(1""2""""3""""""4""""""""5"""""""""")" TEXT' & @CRLF & _
')'
;~MsgBox(0, '源字符串', $sSource)
Local $sSRERe = StringRegExpReplace($sSource, '(?si).*?\((.*)\).*', '\1')
MsgBox(0, '替换结果', $sSRERe)
(?si).*?\((.*)\).*
先过滤第一遍,获取字段信息,这条正则可以匹配一些奇葩的数据库名称比如:(1"2""3"""4""""5""""")
第二遍过滤双引号就OK了
StringRegExpReplace($sSource, '""', '"') (?si).*?\(\s*(.*)\s*\).*
这样子用效果更好
### 友情提示:本脚本由 Au3.REHelper 于 2019/09/13 14:53 自动生成,不保证其正确性,请自行测试 ###
Local $sSource = _
'CREATE TABLE "test" (' & @CRLF & _
'"(1""2""""3""""""4""""""""5"""""""""")" TEXT,' & @CRLF & _
'"aaaaaa" TEXT' & @CRLF & _
')'
;~MsgBox(0, '源字符串', $sSource)
Local $sSRERe = StringRegExpReplace($sSource, '(?si).*?\(\s*(.*)\s*\).*', '\1')
MsgBox(0, '替换结果', $sSRERe)
heavenm 发表于 2019-9-13 14:45
忍不住还是动手了
(1"2""3"""4""""5""""")
这个根本就是不合法的…匹配不合法的根本没用
1# 的 aa""a 是合法的 afan 发表于 2019-9-13 14:54
(1"2""3"""4""""5""""")
这个根本就是不合法的…匹配不合法的根本没用
1# 的 aa""a 是合法的
可以创建这种 奇怪名称的数据库,sqlite
heavenm 发表于 2019-9-13 14:59
可以创建这种 奇怪名称的数据库,sqlite
这个是明文,是可以的,一楼的 aa""a 明文是 a"a,如果 (1"2""3"""4""""5""""") 是明文是可以的,如果是引号字符串那应该就是 (1""2""""3""""""4""""""""5"""""""""") 才行 afan 发表于 2019-9-13 15:04
这个是明文,是可以的,一楼的 aa""a 明文是 a"a,如果 (1"2""3"""4""""5""""") 是明文是可以的,如果是 ...
嗯对,数据库结构里面就是这样子,一个双引号会变成2个双引号,对噢我把他转换成单双引号了,执行是不是就有问题了,还要再转换回来
{:1_183:}逗比了好像,根本不用转换引号好像 {:1_199:}真的 是这样子
如果是用来执行的时候,引号不用转换,显示的时候再转换引号,原来如此,没想到这个问题刚刚
页:
[1]