找回密码
 加入
搜索
查看: 1810|回复: 6

有关正则表达式的一点疑问

[复制链接]
发表于 2008-7-10 16:04:38 | 显示全部楼层 |阅读模式
想从一段代码中取得中文内容,可是当中文内容为分多行时,总是不成功,请各位帮我看看,谢谢
代码如下:
$File = FileOpen("b.txt", 0)

$Source = FileRead($File)

FileClose($File)

$array = StringRegExp($Source, '?s(?<=<div\sclass="gs1">).*?(?=<\/div>)', 1)

MsgBox(0, "", @error)
b.txt 内容如下:
<body>
古诗一
<div class="gs1">
1白日依山尽
2黄河入海流
3欲穷千里目
4更上一层楼</div>
古诗二
<div class="gs2">
a春眠不觉晓
b处处闻啼鸟
c夜来风雨声
d花落知多少
</div>
<body>
[ 本帖最后由 pcmac 于 2008-7-10 20:27 编辑 ]
发表于 2008-7-10 16:57:13 | 显示全部楼层
看帮助啊, .的含义为    . Match any single character (except newline).
你要抓获的文本包含换行,当然不行
发表于 2008-7-10 17:14:33 | 显示全部楼层
[au3]$File = FileOpen("b.txt", 0)

$Source = FileRead($File)

FileClose($File)

$res = StringRegExpReplace($Source, "\x3c[^\x3e]*\x3e", "")

MsgBox(0, "", $res)[/au3]
发表于 2008-7-10 17:25:03 | 显示全部楼层
原帖由 clonecd 于 2008-7-10 17:14 发表
$File = FileOpen("b.txt", 0)

$Source = FileRead($File)

FileClose($File)

$res = StringRegExpReplace($Source, "\x3c[^\x3e]*\x3e", "")

MsgBox(0, "", $res)

呵呵,不错,
我也来个,反其道而行,
#include "array.au3"
$File = FileOpen("b.txt", 0)
$Source = FileRead($File)
FileClose($File)
$array = StringRegExp($Source, '[^\x00-\xff]+', 3);
;~ _ArrayDisplay($array)
If IsArray($array) Then
        $newtxt = _ArrayToString($array, @CRLF)
        MsgBox(0, "提取到的中文字符", $newtxt)
EndIf
 楼主| 发表于 2008-7-10 20:16:12 | 显示全部楼层
不错,楼上两位的代码都可以把所有的中文都提取出来。
三楼去掉了所有尖括号里的东西,四楼去掉了所有不是中文的字符。
可能我没有把我的目的说清楚,其实这个文件我构造出来的用意是要只提取第一首诗的正文部分。

回一楼,我在最前面加了 ?s 就是为了 . 可以包括新行
比较奇怪的是,这个好像没起作用,几位知道怎么回事吗,先谢谢楼上几位了

ps:我又把 b.txt 的内容改了一下

[ 本帖最后由 pcmac 于 2008-7-10 20:19 编辑 ]
 楼主| 发表于 2008-7-10 20:26:09 | 显示全部楼层
我知道了,原来我把语法写错了,不好意思,正确的应该是下面这样写:
$array = StringRegExp($Source, '(?<=<div\sclass="gs1">)(?s).*?(?=<\/div>)', 2)
感谢楼上几位

[ 本帖最后由 pcmac 于 2008-7-11 08:09 编辑 ]
发表于 2010-9-24 17:23:13 | 显示全部楼层
呵呵,不错,
我也来个,反其道而行,
pcbar 发表于 2008-7-10 17:25



    $res = StringRegExpReplace($Source, "\x3c[^\x3e]*\x3e", "")
$array = StringRegExp($Source, '[^\x00-\xff]+', 3)
这两句中的表达式 [^\x00-\xff]非ascii字符 ?还有\x3c[^\x3e]*\x3e都怎么解释呢

\x## 匹配指定的ascii字符,用字符的的十六进制表示. 只能是 2 个数字
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-10-3 06:26 , Processed in 0.097163 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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