找回密码
 加入
搜索
查看: 2612|回复: 17

正则 关于(?:...)的应用

[复制链接]
发表于 2009-6-13 14:23:47 | 显示全部楼层 |阅读模式
本帖最后由 lsq726 于 2009-6-13 15:56 编辑
#include <INet.au3> 

$test1 = "<test><![TEST[测试]]></TEST>"

$nOffset = 1
While 1
    ;$array = StringRegExp($test1, '<test><!\[TEST\[[^\s]*\]\]></TEST>', 1, $nOffset)
     $array = StringRegExp($test1, '(?:<test><!\[TEST\[)[^\s]*(?:\]\]></TEST>)', 1, $nOffset)
    
    If @error = 0 Then
        $nOffset = @extended
    Else
        ExitLoop
    EndIf
    for $i = 0 to UBound($array) - 1
        msgbox(0, "RegExp 测试选项 1 - " & $i, $array[$i])
    Next
WEnd
2个代码获取的效果是一样
$array = StringRegExp($test1, '<test><!\[TEST\[[^\s]*\]\]></TEST>', 1, $nOffset)
     $array = StringRegExp($test1, '(?:<test><!\[TEST\[)[^\s]*(?:\]\]></TEST>)', 1, $nOffset)


想只获取“测试”字符串 该怎么弄?
发表于 2009-6-13 14:55:10 | 显示全部楼层
$array = StringRegExp($test1, '\[TEST\[(.*?)\]\]></(?i)TEST>', 1, $nOffset)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2009-6-13 14:58:18 | 显示全部楼层
\[TEST\[(.*?)\]\]></TEST>
这样也可以了

评分

参与人数 1金钱 +5 收起 理由
lsq726 + 5 谢谢,,

查看全部评分

 楼主| 发表于 2009-6-13 15:16:23 | 显示全部楼层
本帖最后由 lsq726 于 2009-6-13 17:09 编辑
(.*?)
的确 可以了。。,
看说明后:
. 匹配任何的单字符 (除换行以外).
* 完全重复早先的字符, 置位或组 0 或更多次数. 等价于 {0,}
? 早先的字符, 置位或组可能出现或可能不出现. 等价于 {0, 1}


没理解~~
lynfr8 兄 。。能给讲解 一下么?
发表于 2009-6-13 16:29:37 | 显示全部楼层
狼兄 巨汗!~
发表于 2009-6-13 17:35:29 | 显示全部楼层
看说明后:没理解~~
lynfr8 兄 。。能给讲解 一下么?
lsq726 发表于 2009-6-13 15:16

呵呵,其实我也是对正则又爱又恨的
它太强大了也太抽象了
就好像你看见一个美女,明知道是大美女
想着让她做自己女朋友,却又怕怕的...
呵呵

目标字符串:
"<test><![TEST[测试]]></TEST>"
分析表达式:
简单而言就是通过前后包抄来匹配中间所需那段字符

比如\[TEST\[(.*?)\]\]></TEST>表达式里:
\[TEST\[  匹配 [TEST[---------前面截
\]\]></TEST> 匹配 ]]></TEST>-----后面堵
而(.*?)就是表示这前后截断的任意字符
.*就是任意字符,()表示要截取这一段为匹配结果
那个?不用也可以
其实这样的表达式也可以TEST\[(.*)\]\]><
自己试试
论坛中文资料区有相关资料,自己找找看看
发表于 2009-6-13 17:36:39 | 显示全部楼层
\]=]
\是转义字符
 楼主| 发表于 2009-6-13 19:13:21 | 显示全部楼层
本帖最后由 lsq726 于 2009-6-13 19:15 编辑
()
原来是截取的意思。。太感谢了。。

中文帮助 里竟然没看出这个意思 ,汗 太感谢了

----
PS: 帮看看 这个正则 问题出在哪?
$array = StringRegExp($test1, '(?:<test><!\[TEST\[)[^\s]*(?:\]\]></TEST>)', 1, $nOffset)
=========
发表于 2009-6-13 19:32:46 | 显示全部楼层
( ) 的定义:标记一个子表达式的开始和结束位置
我说是截取是方便你理解
至于你的表达式
呵呵,我看不懂你写的
 楼主| 发表于 2009-6-13 20:23:32 | 显示全部楼层
谢谢了
发表于 2009-6-13 20:35:22 | 显示全部楼层
发表于 2009-6-13 21:24:51 | 显示全部楼层
谢谢楼上的学习资料!
 楼主| 发表于 2009-6-13 22:45:30 | 显示全部楼层
$array = StringRegExp($test1, '\[TEST\[(.*?)\]\]>', 1, $nOffset)
3979
lynfr8 发表于 2009-6-13 14:55



lynfr8兄。你这个小工具 可以分享么?
发表于 2009-6-13 23:21:42 | 显示全部楼层
传送门:
http://www.autoitx.com/forum.php ... hlight=%D5%FD%D4%F2
字符串正则表达式测试V2版
发表于 2009-6-14 08:54:57 | 显示全部楼层
学习一下。。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-13 04:10 , Processed in 0.081314 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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