有关正则表达式的一点疑问
想从一段代码中取得中文内容,可是当中文内容为分多行时,总是不成功,请各位帮我看看,谢谢代码如下:$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 编辑 ] 看帮助啊, .的含义为 . Match any single character (except newline).
你要抓获的文本包含换行,当然不行 $File = FileOpen("b.txt", 0)
$Source = FileRead($File)
FileClose($File)
$res = StringRegExpReplace($Source, "\x3c[^\x3e]*\x3e", "")
MsgBox(0, "", $res) 原帖由 clonecd 于 2008-7-10 17:14 发表 http://www.autoitx.com/images/common/back.gif
$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 不错,楼上两位的代码都可以把所有的中文都提取出来。
三楼去掉了所有尖括号里的东西,四楼去掉了所有不是中文的字符。
可能我没有把我的目的说清楚,其实这个文件我构造出来的用意是要只提取第一首诗的正文部分。
回一楼,我在最前面加了 ?s 就是为了 . 可以包括新行
比较奇怪的是,这个好像没起作用,几位知道怎么回事吗,先谢谢楼上几位了
ps:我又把 b.txt 的内容改了一下
[ 本帖最后由 pcmac 于 2008-7-10 20:19 编辑 ] 我知道了,原来我把语法写错了,不好意思,正确的应该是下面这样写:$array = StringRegExp($Source, '(?<=<div\sclass=\"gs1\">)(?s).*?(?=<\/div>)', 2)感谢楼上几位
[ 本帖最后由 pcmac 于 2008-7-11 08:09 编辑 ] 呵呵,不错,
我也来个,反其道而行,
pcbar 发表于 2008-7-10 17:25 http://www.autoitx.com/images/common/back.gif
$res = StringRegExpReplace($Source, "\x3c[^\x3e]*\x3e", "")
$array = StringRegExp($Source, '[^\x00-\xff]+', 3)
这两句中的表达式 [^\x00-\xff]非ascii字符 ?还有\x3c[^\x3e]*\x3e都怎么解释呢
\x## 匹配指定的ascii字符,用字符的的十六进制表示. 只能是 2 个数字
页:
[1]