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

shano 发表于 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

tryhi 发表于 2010-11-22 19:10:26

嗯,这样也行,不过因为在学正则嘛。。。。所以想用正则解决

水木子 发表于 2010-11-22 19:35:48

不太明白楼主的意思!

kxing 发表于 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

sky808 发表于 2010-11-22 20:15:51

不错,支持下~~~

binghc 发表于 2010-11-22 20:48:39

看不懂楼主啥意思!
跟百度一样?排序吗,匹配字段越多越靠前??

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

tryhi 发表于 2010-11-22 22:02:47

就是要不按顺序也能返回真这样,哎……怎么表达呢,真是麻烦

binghc 发表于 2010-11-22 22:22:48

回复 9# tryhi


    你出题,别人解题,你现在连问题都不能描述清楚,怎么让别人去解啊

sky808 发表于 2010-11-22 22:42:23

本帖最后由 sky808 于 2010-11-22 22:44 编辑

回复 9# tryhi

KXING写给你那段不是可以吗?
辛苦回答你的帖子一个测试都没有!!!

tryhi 发表于 2010-11-22 23:19:58

本帖最后由 tryhi 于 2010-11-22 23:24 编辑

回复 5# kxing
实在不好意思,刚真的忘了看,测试成功,不过跟我的一样也是用for,对了,请问一下怎么取消区分大小写?

tryhi 发表于 2010-11-22 23:26:49

回复 10# binghc
就是根据原代码进行简化,不要用for,直接一个正则得出是否符合,不知能不能这样

水木子 发表于 2010-11-22 23:28:33

就是要找出某字符串中是否含有给定的字符串吗? 但是顺序可能是乱的?是这个意思吗?

tryhi 发表于 2010-11-22 23:31:18

回复 14# 水木子
对对,就是这样,而且要全部包含才行,顺序可乱。关于大小写已经懂了,用(?i)
页: [1] 2
查看完整版本: 【已解决】关于正则的一个小问题:如何跟百度那样进行搜索