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

[效率算法] 请教正则匹配的问题

 火.. [复制链接]
发表于 2011-4-10 12:20:51 | 显示全部楼层 |阅读模式
本帖最后由 itljl 于 2011-4-10 12:26 编辑

如何用正则匹配以下字符

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

"=123="

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

谢谢
发表于 2011-4-10 12:47:51 | 显示全部楼层
\S+123\S+
\S123\S
楼主先测试一下,感觉说得不是很明白。
发表于 2011-4-10 12:51:33 | 显示全部楼层
匹配 “@123@”
.*(\@123\@).*
匹配  "=123="
.*(\=123\=).*
匹配 "任何多个或一个字符" + 123 + "任何多个或一个字符"
.*(123).*
匹配  "任何一个字符" + 123 + “任何一个字符”
.*(.123.).*
发表于 2011-4-10 12:52:21 | 显示全部楼层
我晕  回复你这个主题  减我20个金币
 楼主| 发表于 2011-4-10 14:03:58 | 显示全部楼层
回复 4# haijie1223


    回复为什么会减金币呢????
发表于 2011-4-10 15:00:51 | 显示全部楼层
学习一下,听说会减金币?
发表于 2011-4-10 17:18:32 | 显示全部楼层
你的表达有误,请提供你要匹配的两个字符串,起码我不知道你要匹配什么!听说回复也扣钱?
 楼主| 发表于 2011-4-10 18:01:40 | 显示全部楼层
回复 7# love5173

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


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

11231
21232
a123a
b123a
之类的。这样明白了吗?
 楼主| 发表于 2011-4-10 18:01:50 | 显示全部楼层
回复 3# haijie1223

谢谢 ,我测试一下。
发表于 2011-4-10 21:59:39 | 显示全部楼层
本帖最后由 love5173 于 2011-4-10 22:05 编辑

回复 9# itljl
问题是你的第一种情况也在第二种情况里面有 也就是说符合第二个表达式的一定符合第一个表达式
你要做区分吗
要知道严格说 空格 换行 制表符都算是字符串中的字符,你说的正则我可以写,但是写出来的未必是你要的,你表达的不是很好,你的限定条件越多越好,别怕别人写不出来
 楼主| 发表于 2011-4-10 22:01:36 | 显示全部楼层
回复 10# love5173


需要的。
发表于 2011-4-10 22:13:11 | 显示全部楼层
算了 不问你了 我直接写吧
是不是
1、  ①123左边一个字符右边多个字符
     ②123左边多个字符右边1个字符
     ③123左右各多个字符
2、  123左右只有一个字符
并且,以上两种情况 所谓的字符 都不包含空白符
我的表达对吗
发表于 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[UBound($Test)/3]
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
发表于 2011-4-10 22:44:52 | 显示全部楼层
回复 13# 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[UBound($Test)/3]
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
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-2 00:31 , Processed in 0.084329 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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