[已解决]问个正则,并优化一下。
本帖最后由 志艺风云 于 2018-8-14 16:13 编辑$Combo4Text 值可能为(不分大小写):
SELECT * FROM 任意字符
SELECT 任意字符 FROM 任意字符
select 任意字符 INTO 任意字符 from 任意字符
INSERT INTO 任意字符
DELETE FROM 任意字符
这两个if 的$Combo4Text 正则?能不能只用一个IF?实际即是 为空或者开始含有SELECT且不是select 任意字符 INTO 任意字符
Local $Combo4Text = GUICtrlRead($Combo4)
If $Combo4Text = "" Or StringLeft($Combo4Text, 6) = "SELECT" Then
If Not StringRegExp($Combo4Text, "(?i)^SELECT .* into .* from .*") Then
_OpenTables($Combo4Text)
Else
_ExecuteSql($Combo4Text)
EndIf
Else
_ExecuteSql($Combo4Text)
EndIf
本帖最后由 志艺风云 于 2018-8-14 14:49 编辑
就是这个正则应该是什么,不分大小写
这个字符串的结果为真:SELECT 任意字符 FROM 任意字符 INTO 任意字符
这个字符串的结果为假:select 任意字符 INTO 任意字符 from 任意字符
这个字符串的结果为假:任意字符
即是开始有"SELECT "且不为 "select 任意字符 INTO 任意字符 from 任意字符"的正则结果为真
简单的问题被你描述成这样也是强~
既然描述不清,最基本的可运行脚本也没有 afan 发表于 2018-8-14 15:14
简单的问题被你描述成这样也是强~
既然描述不清,最基本的可运行脚本也没有
感谢大佬,这就是我想要的,需然看不明白那正则
Local $Combo4Text
$Combo4Text = ""
$Combo4Text = "SELECT * FROM 任意字符"
$Combo4Text = "SELECT 任意字符 FROM 任意字符"
$Combo4Text = "SELECT 任意字符 FROM 任意字符 INTO 任意字符"
$Combo4Text = "select 任意字符 INTO 任意字符 from 任意字符"
$Combo4Text = "INSERT INTO 任意字符"
$Combo4Text = "任意字符"
For $i = 0 To 6
If $Combo4Text[$i] = "" Or StringRegExp($Combo4Text[$i], "(?mi)^SELECT(?:(?!into.*?from).)+$") Then
MsgBox(0, "正则测试 " & $i, "字符串:" & $Combo4Text[$i] & @CRLF & "结果为 真")
Else
MsgBox(0, "正则测试 " & $i, "字符串:" & $Combo4Text[$i] & @CRLF & "结果为 假")
EndIf
Next
志艺风云 发表于 2018-8-14 16:10
感谢大佬,这就是我想要的,需然看不明白那正则
这样不就行了?
If StringRegExp($Combo4Text[$i], '^$|^SELECT\h+\V+') Then afan 发表于 2018-8-14 16:32
这样不就行了?
不行啊,下面这也假了
$Combo4Text = "SELECT 任意字符 FROM 任意字符" 志艺风云 发表于 2018-8-14 17:13
不行啊,下面这也假了
$Combo4Text = "SELECT 任意字符 FROM 任意字符"
怎么可能?我测试都正常 本帖最后由 志艺风云 于 2018-8-15 10:56 编辑
afan 发表于 2018-8-14 17:52
怎么可能?我测试都正常
喔,不好意思,那个是对的,我试时用了小写字母,是我复制错了。但你这个没有分大小写,且在你的 正则助手 测试,只能试一行数据,所以正则是以为错的。
请教后面的 \h+\V+ 改成.*有什么差别啊
Local $Combo4Text
$Combo4Text = "" ;真
$Combo4Text = "select * FROM 任意字符" ;真
$Combo4Text = "sELECT 任意字符 FROM 任意字符" ;真
$Combo4Text = "SELECT 任意字符 FROM 任意字符 into 任意字符" ;真
$Combo4Text = "select 任意字符 INTO 任意字符 from 任意字符" ;假
$Combo4Text = "INSERT INTO 任意字符" ;假
$Combo4Text = "任意字符" ;假
For $i = 0 To 6
;If $Combo4Text[$i] = "" Or StringRegExp($Combo4Text[$i], "(?mi)^SELECT(?:(?!into.*?from).)+$") Then
If StringRegExp($Combo4Text[$i], "^$|^SELECT\h+\V+") Then
MsgBox(0, "测试[" & $i & "]应为:" & ($i < 4 ? "真" : "假"), "字符串:" & $Combo4Text[$i] & @CRLF & "结果为:真")
Else
MsgBox(0, "测试[" & $i & "]应为:" & ($i < 4 ? "真" : "假"), "字符串:" & $Combo4Text[$i] & @CRLF & "结果为:假")
EndIf
Next
志艺风云 发表于 2018-8-15 10:50
喔,不好意思,那个是对的,我试时用了小写字母,是我复制错了。但你这个没有分大小写
我只根据你的测试源来,你的ok我的就都ok,你没有提到的就没有考虑 afan 发表于 2018-8-15 10:53
我只根据你的测试源来,你的ok我的就都ok,你没有提到的就没有考虑
回复的飞快,我发完发现没说完又改了下。 志艺风云 发表于 2018-8-15 10:59
回复的飞快,我发完发现没说完又改了下。
If StringRegExp($Combo4Text[$i], "^$|(?i)^SELECT(?:(?!into).)*FROM") Then 志艺风云 发表于 2018-8-15 10:50
喔,不好意思,那个是对的,我试时用了小写字母,是我复制错了。但你这个没有分大小写,且在你的 正则助 ...
在你这没什么差别,那是强制有一个空格且有一个以上同行字符 学习学习正则
页:
[1]