搜索
查看: 3273|回复: 6

请教string.match返回NULL的问题

[复制链接]

13

主题

72

帖子

635

积分

培训班

积分
635
发表于 2012-12-25 04:18:19 | 显示全部楼层 |阅读模式
本帖最后由 leisurely 于 2012-12-25 09:29 编辑

str2=http://img.duxiu.com/n/jpgfs.shtml?kid=646563656C6B64673336383732393733&pagetype=5&pagenum=1&template=jpgfs&uf=1&a=2060530A52B7019D5212EE588C789580&t=4&url=http%3A%2F%2Fbook.szdnet.org.cn%2FbookDetail.jsp%3FdxNumber%3D000006528152%26d%3D87A74238D07DAB9A683CCDB906F0C31D%26rtype%3D1
var source1 = http.down(str2);
var ss = string.match(source1,'ssNo\\s=\\s"(\\d*)');
var page = string.match(source1,'页数\:(\\d+)');

找了一下以前的旧贴和查看了模式匹配的帮助,还是没能解决,所以想请教一下各位:为什么ss和page返回的值会是Null(好像匹配的是数字的都会返回NULL的,但是用该匹配表达式用模式匹配工具是可以匹配到的正确的值。),而不会返回匹配的数值呢?要怎么样才能解决呢?谢谢。
回复

使用道具 举报

48

主题

593

帖子

3337

积分

五级会员

Rank: 8Rank: 8

积分
3337
发表于 2012-12-25 09:50:42 | 显示全部楼层

[i=s] 本帖最后由 jyb21 于 2012-12-25 09:53 编辑 [/i] [code]import inet.http; http = in

本帖最后由 jyb21 于 2012-12-25 09:53 编辑
  1. import inet.http;
  2. http = inet.http();
  3. str2="http://img.duxiu.com/n/jpgfs.shtml?kid=646563656C6B64673336383732393733&pagetype=5&pagenum=1&template=jpgfs&uf=1&a=2060530A52B7019D5212EE588C789580&t=4&url=http%3A%2F%2Fbook.szdnet.org.cn%2FbookDetail.jsp%3FdxNumber%3D000006528152%26d%3D87A74238D07DAB9A683CCDB906F0C31D%26rtype%3D1"
  4. var source1 = http.down(str2);
  5. var ss = string.match(source1,'ssNo\\s=\\s"(\\d*)');
  6. var page = string.match(source1,'页数\\:(\\d+)');
  7. io.open()
  8. io.print(ss,page)
复制代码
这个就可以了
代码模式比较好看些
你要想匹配到,首先要查下source1有没有内容啊
你比较下你那str2和我这里的str2有什么区别
还有下次要发帖求助帖上完整代码,不然还要给你补充。

评分

参与人数 1银币 +10 收起 理由
leisurely + 10 谢谢您帮忙,新手分值不多,小小心意,感谢.

查看全部评分

回复

使用道具 举报

8

主题

462

帖子

2551

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2551
发表于 2012-12-25 09:50:57 | 显示全部楼层

你的模式表达式中的 "\:" 如果放在单引号中,因为"\"本身是转义符,所以需要写为 "\\:" 这是你匹配失败返回null空值的原因, 下面是修正后

你的模式表达式中的 "\:" 如果放在单引号中,因为"\"本身是转义符,所以需要写为 "\\:"
这是你匹配失败返回null空值的原因,

下面是修正后的代码( 友情提醒:发表代码请注意整理代码格式并尽可能可以复制运行,不要断头少尾让回答问题的人帮你去补,别人也要花时间去调试,不能一眼就看出问题 )
  1. import console;
  2. import inet.http;

  3. var http = inet.http();
  4. var url = //http://img.duxiu.com/n/jpgfs.shtml?kid=646563656C6B64673336383732393733&pagetype=5&pagenum=1&template=jpgfs&uf=1&a=2060530A52B7019D5212EE588C789580&t=4&url=http%3A%2F%2Fbook.szdnet.org.cn%2FbookDetail.jsp%3FdxNumber%3D000006528152%26d%3D87A74238D07DAB9A683CCDB906F0C31D%26rtype%3D1
  5. var source1 = http.get(url);

  6. string.save("/source1.txt", source1 )
  7. var ss = string.match(source1,'ssNo\\s=\\s"(\\d*)');
  8. var page = string.match(source1,"页数\:(\d+)");

  9. console.log( ss,page )
复制代码

评分

参与人数 1银币 +10 收起 理由
leisurely + 10 谢谢您帮忙,新手分值不多,小小心意,感谢.

查看全部评分

回复

使用道具 举报

13

主题

72

帖子

635

积分

培训班

积分
635
 楼主| 发表于 2012-12-25 10:39:40 | 显示全部楼层

[quote][size=2][color=#999999]jyb21 发表于 2012-12-25 09:50[/color] [url=forum.php?

jyb21 发表于 2012-12-25 09:50
这个就可以了
代码模式比较好看些
你要想匹配到,首先要查下source1有没有内容啊

谢谢您的帮助,谢谢。
您说的这个发贴问题,我以后会注意的,谢谢提醒。

但是为什么我把这个匹配的值,赋予一个文本框,却显示的还是NULL的?
var ssnuber = string.match(source1,'ssNo\\s=\\s"(\\d*)');
mainForm.ssid.text = ssnumber; // 这个文本框获取到的还是Null。我测试其它匹配的,主要是纯数字的都不行。
回复

使用道具 举报

48

主题

593

帖子

3337

积分

五级会员

Rank: 8Rank: 8

积分
3337
发表于 2012-12-25 10:45:27 | 显示全部楼层

[code]import win.ui; /*DSG{{*/ mainForm = ..win.form( bottom=400;parent=...;te

  1. import win.ui;
  2. /*DSG{{*/
  3. mainForm = ..win.form( bottom=400;parent=...;text="aardio Form";right=600 )
  4. mainForm.add(
  5. ssid={ bottom=113;right=226;left=119;top=90;z=1;transparent=1;text="static";cls="static" }
  6. )
  7. /*}}*/

  8. import inet.http;
  9. http = inet.http();
  10. str2="http://img.duxiu.com/n/jpgfs.shtml?kid=646563656C6B64673336383732393733&pagetype=5&pagenum=1&template=jpgfs&uf=1&a=2060530A52B7019D5212EE588C789580&t=4&url=http%3A%2F%2Fbook.szdnet.org.cn%2FbookDetail.jsp%3FdxNumber%3D000006528152%26d%3D87A74238D07DAB9A683CCDB906F0C31D%26rtype%3D1"
  11. var source1 = http.down(str2);
  12. var ss = string.match(source1,'ssNo\\s=\\s"(\\d*)');
  13. var page = string.match(source1,'页数\\:(\\d+)');
  14. //io.open()
  15. //io.print(ss,page)
  16. mainForm.ssid.text = ss;
  17. mainForm.show()
  18. win.loopMessage();
复制代码

评分

参与人数 1银币 +10 收起 理由
leisurely + 10 谢谢您的帮忙,圣诞快乐。

查看全部评分

回复

使用道具 举报

13

主题

72

帖子

635

积分

培训班

积分
635
 楼主| 发表于 2012-12-25 10:50:17 | 显示全部楼层

[quote][size=2][color=#999999]roger 发表于 2012-12-25 09:50[/color] [url=forum.php?

roger 发表于 2012-12-25 09:50
你的模式表达式中的 "\:" 如果放在单引号中,因为"\"本身是转义符,所以需要写为 "\\:"
这是你匹配失败返回 ...

非常感谢您的指点,这个页数这个问题的确是这个原因,感谢您的帮忙,不过这个ss还是一样显示为null,在控制台中这两个显示的都是正确的,但是我把这两个值赋予文本框的时候,这个页数的按您的写法显示是正确的,但是这个ss显示还是为Null(var ss = string.match(source1,'ssNo\\s=\\s"(\\d*)');
mainForm.ssid.text = ss;),不知道是什么原因呢?希望您再帮忙看一下,谢谢。
回复

使用道具 举报

13

主题

72

帖子

635

积分

培训班

积分
635
 楼主| 发表于 2012-12-25 10:54:17 | 显示全部楼层

[quote][size=2][color=#999999]jyb21 发表于 2012-12-25 10:45[/color] [url=forum.php?

jyb21 发表于 2012-12-25 10:45

测试正常了,谢谢您的帮忙。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2020-7-5 15:26 , Processed in 0.078125 second(s), 28 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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