itljl 发表于 2011-4-10 12:20:51

请教正则匹配的问题

本帖最后由 itljl 于 2011-4-10 12:26 编辑

如何用正则匹配以下字符

"@123@"
可以匹配字符串
"任何多个或一个字符" + 123 + "任何多个或一个字符"

"=123="

可以匹配字符串
"任何一个字符" + 123 + “任何一个字符”

谢谢

kevinch 发表于 2011-4-10 12:47:51

\S+123\S+
\S123\S
楼主先测试一下,感觉说得不是很明白。

haijie1223 发表于 2011-4-10 12:51:33

匹配 “@123@”.*(\@123\@).*匹配"=123=".*(\=123\=).*匹配 "任何多个或一个字符" + 123 + "任何多个或一个字符".*(123).*匹配"任何一个字符" + 123 + “任何一个字符”.*(.123.).*

haijie1223 发表于 2011-4-10 12:52:21

我晕回复你这个主题减我20个金币

itljl 发表于 2011-4-10 14:03:58

回复 4# haijie1223


    回复为什么会减金币呢????

kadingxiaodi 发表于 2011-4-10 15:00:51

学习一下,听说会减金币?

love5173 发表于 2011-4-10 17:18:32

你的表达有误,请提供你要匹配的两个字符串,起码我不知道你要匹配什么!听说回复也扣钱?

itljl 发表于 2011-4-10 18:01:40

回复 7# love5173

"@123@"
可以匹配字符串如:
111123111
222123222
aa123bb
之类的


"=123="
可以匹配字符串如:

11231
21232
a123a
b123a
之类的。这样明白了吗?

itljl 发表于 2011-4-10 18:01:50

回复 3# haijie1223

谢谢 ,我测试一下。

love5173 发表于 2011-4-10 21:59:39

本帖最后由 love5173 于 2011-4-10 22:05 编辑

回复 9# itljl
问题是你的第一种情况也在第二种情况里面有 也就是说符合第二个表达式的一定符合第一个表达式
你要做区分吗
要知道严格说 空格 换行 制表符都算是字符串中的字符,你说的正则我可以写,但是写出来的未必是你要的,你表达的不是很好,你的限定条件越多越好,别怕别人写不出来{:face (280):}

itljl 发表于 2011-4-10 22:01:36

回复 10# love5173


需要的。

love5173 发表于 2011-4-10 22:13:11

算了 不问你了 我直接写吧
是不是
1、①123左边一个字符右边多个字符
   ②123左边多个字符右边1个字符
   ③123左右各多个字符
2、123左右只有一个字符
并且,以上两种情况 所谓的字符 都不包含空白符
我的表达对吗

3mile 发表于 2011-4-10 22:17:19

能力有限,一句正则无法完成楼主的要求.
还是写个函数来解决吧.
#include <Array.au3>
Local $Str = _
                '111123111' & @CRLF & _
                '222123222' & @CRLF & _
                'aa123bb' & @CRLF & _
                '11231' & @CRLF & _
                '21232' & @CRLF & _
                'a123a' & @CRLF & _
                'b123a'
MsgBox(0, '原字符串', $Str)

$temp=_StringRegExp123($str,0);0为"@123@"形式,1为"=123="
_ArrayDisplay($temp)

$temp=_StringRegExp123($str,1);0为"@123@"形式,1为"=123="
_ArrayDisplay($temp)

func _StringRegExp123($string,$flag)
        if $flag=0 Then
                Local $Test = StringRegExp($string, '(.{2,})(123)(\1)', 3)
        Else
                Local $Test = StringRegExp($string, '(.)(123)(\1)', 3)
        EndIf
       
local $return
local $k=0
for $i=0 to UBound($Test)-1 step 3
        $return[$k]=$Test[$i]&$Test[$i+1]&$Test[$i+2]
        $k+=1
Next
Return $return
EndFunc

love5173 发表于 2011-4-10 22:44:52

回复 13# 3mile
好像能匹配到空白符

3mile 发表于 2011-4-10 22:55:05

哦,空白不匹配吗?
#include <Array.au3>
Local $Str = _
                '111123111' & @CRLF & _
                '222123222' & @CRLF & _
                'aa123bb' & @CRLF & _
                '11231' & @CRLF & _
                '21232' & @CRLF & _
                'a123a' & @CRLF & _
                'b123a' & @CRLF & _
                                '123'
MsgBox(0, '原字符串', $Str)

$temp=_StringRegExp123($str,0);0为"@123@"形式,1为"=123="
_ArrayDisplay($temp)

$temp=_StringRegExp123($str,1);0为"@123@"形式,1为"=123="
_ArrayDisplay($temp)

func _StringRegExp123($string,$flag)
      if $flag=0 Then
                Local $Test = StringRegExp($string, '([^\s+].{2,})(123)(\1)', 3)
      Else
                Local $Test = StringRegExp($string, '([^\s+].)(123)(\1)', 3)
      EndIf
      
local $return
local $k=0
for $i=0 to UBound($Test)-1 step 3
      $return[$k]=$Test[$i]&$Test[$i+1]&$Test[$i+2]
      $k+=1
Next
Return $return
EndFunc
页: [1] 2
查看完整版本: 请教正则匹配的问题