有关正则表达式的问题,我有一个ASCII码流,包含若干个应用层报,格式如下: ( 积分: 100 )

  • 主题发起人 主题发起人 dablyo
  • 开始时间 开始时间
D

dablyo

Unregistered / Unconfirmed
GUEST, unregistred user!
pkthead...........pkttail...pkthead...........pkttail...............

每个报以pkthead打头,pkttail结尾,前一个报的pkttail跟后一个报的pkthead之间可能含有其他字符,每个报的长度不等,一个ASCII码流中含有的报也不等,并且可能含有不完整的报

我打算用正则表达式从字符流中取出每个报,具体实践时用的是RegStudio提供的TRegExpr类,只能取出第一个,无法循环。
 
pkthead...........pkttail...pkthead...........pkttail...............

每个报以pkthead打头,pkttail结尾,前一个报的pkttail跟后一个报的pkthead之间可能含有其他字符,每个报的长度不等,一个ASCII码流中含有的报也不等,并且可能含有不完整的报

我打算用正则表达式从字符流中取出每个报,具体实践时用的是RegStudio提供的TRegExpr类,只能取出第一个,无法循环。
 
我也想知道正则表达式
 
pkthead[/S]+pkttail
 
正则表达式提供循环方法?
没有吧,配合点代码实现啊
比如用一个pchar来指向字串首部,每匹配完一次把匹配结果丢掉(pchar指针前进匹配字串的长度)
 
piao40993470正解,不过应该改为pkthead[^/S]pkttail
我是试验得到的,道理我也说不清
/s意义是[/t/n/r/f]
/S意义是匹配和/s意义相反的字符
^是否定符
真奇怪。

可以有循环的啊,
ret := regexp.Exec(examplestr);
while ret do
...
...
ret := regexp.ExecNext;
 
/s 匹配任何空白字符,包括空格、制表符、换页符等。与 [ /f/n/r/t/v] 等效。
/S 匹配任何非空白字符。等价于 [^ /f/n/r/t/v]。
我是用vbscript.dll中的TRegExp测试通过的[:D]
 
TPerlRegEx也没问题
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部