请教正则匹配的问题
本帖最后由 itljl 于 2011-4-10 12:26 编辑如何用正则匹配以下字符
用
"@123@"
可以匹配字符串
"任何多个或一个字符" + 123 + "任何多个或一个字符"
"=123="
可以匹配字符串
"任何一个字符" + 123 + “任何一个字符”
谢谢 \S+123\S+
\S123\S
楼主先测试一下,感觉说得不是很明白。 匹配 “@123@”.*(\@123\@).*匹配"=123=".*(\=123\=).*匹配 "任何多个或一个字符" + 123 + "任何多个或一个字符".*(123).*匹配"任何一个字符" + 123 + “任何一个字符”.*(.123.).* 我晕回复你这个主题减我20个金币 回复 4# haijie1223
回复为什么会减金币呢???? 学习一下,听说会减金币? 你的表达有误,请提供你要匹配的两个字符串,起码我不知道你要匹配什么!听说回复也扣钱? 回复 7# love5173
"@123@"
可以匹配字符串如:
111123111
222123222
aa123bb
之类的
而
"=123="
可以匹配字符串如:
11231
21232
a123a
b123a
之类的。这样明白了吗? 回复 3# haijie1223
谢谢 ,我测试一下。 本帖最后由 love5173 于 2011-4-10 22:05 编辑
回复 9# itljl
问题是你的第一种情况也在第二种情况里面有 也就是说符合第二个表达式的一定符合第一个表达式
你要做区分吗
要知道严格说 空格 换行 制表符都算是字符串中的字符,你说的正则我可以写,但是写出来的未必是你要的,你表达的不是很好,你的限定条件越多越好,别怕别人写不出来{:face (280):} 回复 10# love5173
需要的。 算了 不问你了 我直接写吧
是不是
1、①123左边一个字符右边多个字符
②123左边多个字符右边1个字符
③123左右各多个字符
2、123左右只有一个字符
并且,以上两种情况 所谓的字符 都不包含空白符
我的表达对吗 能力有限,一句正则无法完成楼主的要求.
还是写个函数来解决吧.
#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 回复 13# 3mile
好像能匹配到空白符 哦,空白不匹配吗?
#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