找回密码
 加入
搜索
查看: 8251|回复: 19

[系统综合] 【已解决】关于正则的一个小问题:如何跟百度那样进行搜索

 火.. [复制链接]
发表于 2010-11-22 18:22:40 | 显示全部楼层 |阅读模式
本帖最后由 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[0];多少个条件循环多少次------------此处应该可以简化
                $exp = StringRegExp($a, $c1[$i], 0);返回是否包含检索的字符
                If $exp = 0 Then;失败就结束
                        $fanhui = False
                        ExitLoop
                EndIf
                $fanhui = True;全部成功
        Next
        Return $fanhui
EndFunc  
已经知道答案了,原来正则是不能直接得出来的,非常感谢楼下各位的帮助,今天的分数已经给完了,明天再进行评分,再一次说声感谢!!

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2010-11-22 18:49:46 | 显示全部楼层
必须要正则吗   菜鸟一起探讨  比较字符串不就得了吗



$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

评分

参与人数 1金钱 +10 贡献 +5 收起 理由
tryhi + 10 + 5 感谢!不过我还是希望用正则!

查看全部评分

 楼主| 发表于 2010-11-22 19:10:26 | 显示全部楼层
嗯,这样也行,不过因为在学正则嘛。。。。所以想用正则解决
发表于 2010-11-22 19:35:48 | 显示全部楼层
不太明白楼主的意思!

评分

参与人数 1金钱 +10 贡献 +1 收起 理由
tryhi + 10 + 1 感谢关注

查看全部评分

发表于 2010-11-22 19:58:13 | 显示全部楼层
本帖最后由 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

评分

参与人数 1金钱 +40 贡献 +5 收起 理由
tryhi + 40 + 5 刚看得有点乱了,不好意思,又搞错……

查看全部评分

发表于 2010-11-22 20:15:51 | 显示全部楼层
不错,支持下~~~
发表于 2010-11-22 20:48:39 | 显示全部楼层
看不懂楼主啥意思!
跟百度一样?排序吗,匹配字段越多越靠前??

评分

参与人数 1金钱 +10 贡献 +3 收起 理由
tryhi + 10 + 3 感谢关注

查看全部评分

发表于 2010-11-22 21:25:47 | 显示全部楼层
按照你代码的注释我进行了修改,检索字段只能在目标字符串中按顺序出现才会返回真

$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[0]
                $REG &= '.*?' & $c[$I]
        Next
        StringRegExp($str, $REG, 3)
        If @error Then
                MsgBox(0, '', False)
        Else
                MsgBox(0, '', True)
        EndIf
EndFunc   ;==>_main

评分

参与人数 1金钱 +40 贡献 +10 收起 理由
tryhi + 40 + 10 实在不好意思,刚真的忘了看

查看全部评分

 楼主| 发表于 2010-11-22 22:02:47 | 显示全部楼层
就是要不按顺序也能返回真这样,哎……怎么表达呢,真是麻烦
发表于 2010-11-22 22:22:48 | 显示全部楼层
回复 9# tryhi


    你出题,别人解题,你现在连问题都不能描述清楚,怎么让别人去解啊
发表于 2010-11-22 22:42:23 | 显示全部楼层
本帖最后由 sky808 于 2010-11-22 22:44 编辑

回复 9# tryhi

KXING写给你那段不是可以吗?
辛苦回答你的帖子一个测试都没有!!!
 楼主| 发表于 2010-11-22 23:19:58 | 显示全部楼层
本帖最后由 tryhi 于 2010-11-22 23:24 编辑

回复 5# kxing
实在不好意思,刚真的忘了看,测试成功,不过跟我的一样也是用for,对了,请问一下怎么取消区分大小写?
 楼主| 发表于 2010-11-22 23:26:49 | 显示全部楼层
回复 10# binghc
就是根据原代码进行简化,不要用for,直接一个正则得出是否符合,不知能不能这样
发表于 2010-11-22 23:28:33 | 显示全部楼层
就是要找出某字符串中是否含有给定的字符串吗? 但是顺序可能是乱的?是这个意思吗?
 楼主| 发表于 2010-11-22 23:31:18 | 显示全部楼层
回复 14# 水木子
对对,就是这样,而且要全部包含才行,顺序可乱。关于大小写已经懂了,用(?i)
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-10-3 00:24 , Processed in 0.089899 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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