【已解决】跪求正则问题!!详见描述。。
本帖最后由 lsqyx528 于 2010-8-18 14:21 编辑有一段数据,简单描述如下:
No. ID Info
1 101 ASK
Type: A
Length: 20
Peer ID : 202
No. ID Info
1 102 ANSWER
Type: B
Length: 60
Peer ID : 205
No. ID Info
1 101 ASK
Type: A
Length: 20
Peer ID : 207
上面包括3个数据包,每个包都是以“No. ID Info”作为开头。现在需要检查该段数据中是否有数据包的“Info”为“ASK”?如果有,再检查这一个数据包中是否有“Peer ID”且值为“ 207”。如果以上条件都成立,则返回TRUE,否则返回FALSE。
小弟初学正则,还望各位大侠多多指点,谢谢了。 完全没有看懂.. 这意思?$Str = _
'No. ID Info' & @CRLF & _
' 1 101 ASK' & @CRLF & _
'' & @CRLF & _
' Type: A' & @CRLF & _
' Length: 20' & @CRLF & _
' Peer ID : 202' & @CRLF & _
'' & @CRLF & _
'No. ID Info' & @CRLF & _
' 1 102 ANSWER' & @CRLF & _
'' & @CRLF & _
' Type: B' & @CRLF & _
' Length: 60' & @CRLF & _
' Peer ID : 205' & @CRLF
Msgbox(0, test($str), $str)
$Str = _
'No. ID Info' & @CRLF & _
' 1 101 ASK' & @CRLF & _
'' & @CRLF & _
' Type: A' & @CRLF & _
' Length: 20' & @CRLF & _
' Peer ID : 202' & @CRLF & _
'' & @CRLF & _
'No. ID Info' & @CRLF & _
' 1 102 ANSWER' & @CRLF & _
'' & @CRLF & _
' Type: B' & @CRLF & _
' Length: 60' & @CRLF & _
' Peer ID : 205' & @CRLF & _
'' & @CRLF & _
'No. ID Info' & @CRLF & _
' 1 101 ASK' & @CRLF & _
'' & @CRLF & _
' Type: A' & @CRLF & _
' Length: 20' & @CRLF & _
' Peer ID : 207'
Msgbox(0, test($str), $str)
Func test($str)
If StringRegExp($str, 'ASK(?:\r?\n.*){4}ID : 207') Then Return TRUE
Return FALSE
Endfunc 谢谢楼上,但是我现在不是很确定他们中间会空几行,另外我还有可能检测Length,所以用{4}也许不太合适,我想的是查找从发现“ASK”到下一个“No. ID Info”为止的中间区域。不知道有没有更好的办法,谢谢啊。
{:face (356):} 谢谢楼上,但是我现在不是很确定他们中间会空几行,另外我还有可能检测Length,所以用{4}也许不太合适,我想 ...
lsqyx528 发表于 2010-8-18 11:57 http://www.autoitx.com/images/common/back.gif
所以你应该在提问时尽量描述多种情况。 恩,说的是,考虑不周! No. ID Info[\s\d]+?ASK[\s\S]{0,40}Peer ID : 207 谢谢,可以了。
另外,如何就取第一个数据包的内容了? No. ID Info[\s\S]+?Peer ID : \d+ Func test($str)
If StringRegExp($str, '(?s)ASK[^(?=No\.)]+?ID\h:\h207\h*') Then Return TRUE
Return FALSE
Endfunc$str1 = StringRegExpReplace($str, '(?s)(No\..+?)No\..+', '$1') 高手们,谢谢了,问题解决!!!
afan 发表于 2010-8-18 14:03 http://www.autoitx.com/images/common/back.gif
咦 $1...好久没用过了- - 回复 12# rolaka
呵呵,习惯用 \1 也ok~ 本帖最后由 lsqyx528 于 2010-8-18 14:28 编辑
$1,未明白,虽然问题得以解决。
明白了。 回复 10# afan
.*不是匹配除换行符的其他字符么?怎么这里能匹配到换行呢?
页:
[1]
2