【已解决】关于正则的一个小问题:如何跟百度那样进行搜索
本帖最后由 tryhi 于 2010-11-23 08:41 编辑比如说字符串1:ABCDEFG
字符串2:ABCDFG
然后搜索三个字符“D A E”(以空格隔开,就跟百度一样)
用StringRegExp返回字符串1为正确,字符串2为错,就是说字符串必须包含要搜索的三组(或更多)字符才算成功,不知怎么弄。
不知道怎么表达,不知各位看懂我意思没有。
我再补充下,下面是我的代码,目的就是用正则进行简化:$x1 = 'ABCDEFG';用来搜索的字符串1
$x2 = 'ABCDFG';用来搜索的字符串2
$c = "D E FG";检索的字符
MsgBox(0, 0, qq($x1, $c));测试
MsgBox(0, 0, qq($x2, $c));测试
Func qq($a, $b)
$c1 = StringSplit($b, " ");把检索的字符进行拆分
For $i = 1 To $c1;多少个条件循环多少次------------此处应该可以简化
$exp = StringRegExp($a, $c1[$i], 0);返回是否包含检索的字符
If $exp = 0 Then;失败就结束
$fanhui = False
ExitLoop
EndIf
$fanhui = True;全部成功
Next
Return $fanhui
EndFunc已经知道答案了,原来正则是不能直接得出来的,非常感谢楼下各位的帮助,今天的分数已经给完了,明天再进行评分,再一次说声感谢!! 必须要正则吗 菜鸟一起探讨比较字符串不就得了吗
$a='ABCDEFG'
$b='ABCDFG'
If StringInStr ($b,'D') And StringInStr ($b,'A') And StringInStr ($b,'E')Then
MsgBox(0,0,"字符串1符合")
Else
If StringInStr ($a,'D') And StringInStr ($a,'A') And StringInStr ($a,'E')Then
MsgBox(0,0,"字符串2符合")
EndIf
EndIf 嗯,这样也行,不过因为在学正则嘛。。。。所以想用正则解决 不太明白楼主的意思! 本帖最后由 kxing 于 2010-11-22 20:03 编辑
$str='abc测试字符串搜索efg'
MsgBox(0,"test1",_Search($str,"a c f"))
MsgBox(0,"test2",_Search($str,"测试a"))
MsgBox(0,"test3",_Search($str,"h测试a"))
Func _Search($str,$key)
$key=StringStripWS($Key,8)
Local $aKey=StringRegExp($key,"(.)",3)
If NOT @Error Then
For $i=0 To UBound($aKey)-1
If $aKey[$i] Then
If NOT StringRegExp($str,$aKey[$i]) Then Return 0
EndIf
Next
Return 1
EndIf
EndFunc
不错,支持下~~~ 看不懂楼主啥意思!
跟百度一样?排序吗,匹配字段越多越靠前?? 按照你代码的注释我进行了修改,检索字段只能在目标字符串中按顺序出现才会返回真
$x1 = 'ABCDssssssssEiiiiiiiFG';用来搜索的字符串1
$x2 = 'ABCDFG';用来搜索的字符串2
$x3 = 'FGABCDssssssssEiiiiiii'
$c = "D E FG";检索的字符
$c = StringSplit($c, ' ')
_main($x1, $c)
_main($x2, $c)
_main($x3, $c)
Func _main($str, $c)
Dim $REG
For $I = 1 To $c
$REG &= '.*?' & $c[$I]
Next
StringRegExp($str, $REG, 3)
If @error Then
MsgBox(0, '', False)
Else
MsgBox(0, '', True)
EndIf
EndFunc ;==>_main
就是要不按顺序也能返回真这样,哎……怎么表达呢,真是麻烦 回复 9# tryhi
你出题,别人解题,你现在连问题都不能描述清楚,怎么让别人去解啊 本帖最后由 sky808 于 2010-11-22 22:44 编辑
回复 9# tryhi
KXING写给你那段不是可以吗?
辛苦回答你的帖子一个测试都没有!!! 本帖最后由 tryhi 于 2010-11-22 23:24 编辑
回复 5# kxing
实在不好意思,刚真的忘了看,测试成功,不过跟我的一样也是用for,对了,请问一下怎么取消区分大小写? 回复 10# binghc
就是根据原代码进行简化,不要用for,直接一个正则得出是否符合,不知能不能这样 就是要找出某字符串中是否含有给定的字符串吗? 但是顺序可能是乱的?是这个意思吗? 回复 14# 水木子
对对,就是这样,而且要全部包含才行,顺序可乱。关于大小写已经懂了,用(?i)
页:
[1]
2