找回密码
 加入
搜索
查看: 2722|回复: 11

[AU3基础] [已解决]求助正则问题

  [复制链接]
发表于 2011-9-20 14:51:51 | 显示全部楼层 |阅读模式
本帖最后由 kxing 于 2011-9-20 17:25 编辑

目的是要捕获没有 [] 括起来的名字。
一个正则通用于 $s 和 $s2 两个字符串。
多谢帮忙!!!!!
$s="[*张三]与*李四说:xxx"
$s2="*李四与[*张三]说:yyy"

$exp1=stringregexp($s,"^\[.+?\]与([^\[\]]+)说\:|^([^\[\]]+)与\[.+?\]说\:",3)
if not @error then msgbox(0,'',$exp1[0])

$exp2=stringregexp($s2,"^\[.+?\]与([^\[\]]+)说\:|^([^\[\]]+)与\[.+?\]说\:",3)
if not @error then msgbox(0,'',$exp2[0])
 楼主| 发表于 2011-9-20 14:58:33 | 显示全部楼层
本帖最后由 kxing 于 2011-9-20 15:01 编辑

ps!
名字前面的*不一定有。
说后面的:固定不变。
最好能绕过名字包含 “与” 这个关键词。
很麻烦,高手帮忙啦。。。。
发表于 2011-9-20 16:13:21 | 显示全部楼层
本帖最后由 gzh888666 于 2011-9-20 16:19 编辑
#include <Array.au3>
Local $Str = _
                '$s="[*张三]与*李四说:xxx"' & @CRLF & _
                '$s2="*李四与[*张三]说:yyy"' & @CRLF & @CRLF
Local $Test = StringRegExp($str, '([\x{4e00}-\x{9fff}]+?)]', 3)
If Not @Error Then  _ArrayDisplay($Test, UBound($Test))
发表于 2011-9-20 16:32:05 | 显示全部楼层
#include <Array.au3>
Local $Str = _
                '[*张三]与*李四a说:xxx' & @CRLF & _
                '*李四b与[*张三]说:yyy' & @CRLF & _
                '猪头三与[披头四]说:yyy' & @CRLF & _
                '[披头四]与猪头三说:xxx'
MsgBox(0, '原字符串', $Str)
Local $Test = StringRegExp($str, '([^\[\]与\v]+)(?:与\[.+?\])?说', 3)
_ArrayDisplay($Test, UBound($Test))
发表于 2011-9-20 16:37:22 | 显示全部楼层
本帖最后由 gzh888666 于 2011-9-20 16:53 编辑

回复 4# afan
没看清楚题目!另请教afan,\v的用法。帮助里是垂直的空白符。这里是排除掉换行吗?
 楼主| 发表于 2011-9-20 17:24:40 | 显示全部楼层
谢谢楼上两位...
 楼主| 发表于 2011-9-20 17:28:57 | 显示全部楼层
这样的话如果某名字出现 “与” 是否就不能匹配到了。
发表于 2011-9-20 17:41:12 | 显示全部楼层
我也进来学习啦
发表于 2011-9-20 18:00:34 | 显示全部楼层
回复  afan
没看清楚题目!另请教afan,\v的用法。帮助里是垂直的空白符。这里是排除掉换行 ...
gzh888666 发表于 2011-9-20 16:37



    是的~ 因为示例文本为多行,如果是单行则可以不要\v
发表于 2011-9-20 18:13:11 | 显示全部楼层
这样的话如果某名字出现 “与” 是否就不能匹配到了。
kxing 发表于 2011-9-20 17:28
#include <Array.au3>
Local $Str = _
                '[*张三]与*李四a说:xxx' & @CRLF & _
                '*李四b与[*张三]说:yyy' & @CRLF & _
                '毛毛与与[郝婆说]说:yyy' & @CRLF & _
                '[毛毛与]与郝婆说说:xxx'
MsgBox(0, '原字符串', $Str)
Local $Test = StringRegExp($str, '与?([^\[\]\v]+)(?:与\[.+?\])?说', 3)
_ArrayDisplay($Test, UBound($Test))
发表于 2011-9-21 09:45:09 | 显示全部楼层
回复 10# afan
高人就是高人,问题想得周到,膜拜大侠!
 楼主| 发表于 2011-9-21 15:56:20 | 显示全部楼层
谢谢afan啦,膜拜!!!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-10-1 15:16 , Processed in 0.095441 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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