搜索
查看: 1050|回复: 6

模块字串中所有图片链接的问题

[复制链接]

3

主题

18

帖子

114

积分

一级会员

Rank: 2

积分
114
发表于 2018-5-24 19:18:19 | 显示全部楼层 |阅读模式
匹配字串 所有图片链接,为什么只能匹配第1个,求解答,谢谢。代码如下:
  1. var str="asdasds<img  3443   Src='http://xxx.com/1.jpg11'   >asdasdasda看了sds<img b src='http://xxx.com/1.jpg22'   >asdasd";
  2.        
  3.         var pic1=string.gmatch(str,"\<[Ii][Mm][Gg]\s.*?[Ss][Rr][Cc]\s*=\p([\w-\:\./]*)\s*\p.*\>");
  4.         io.open();
  5.        
  6.         for k,v in pic1{
  7.                 io.print(k,v)
  8.                
  9.                 }
复制代码
回复

使用道具 举报

3

主题

50

帖子

420

积分

培训班

积分
420
发表于 2018-5-24 22:45:13 | 显示全部楼层
原因如图。。。
q.jpg
回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13974
发表于 2018-5-25 03:30:40 | 显示全部楼层
模式匹配可以这样写:
import console;

var str = `
asdasds<img  3443   Src='http://xxx.com/1.jpg11'   >asdasdasda看了sds
<img b src="http://xxx.com/1.jpg22"   >asdasd
<img b src=http://xxx.com/1.jpg333   >asdasd
`
;

for img in string.gmatch( str,"<@@<img@>[^>]+") {
   
var src = string.match(img,`<@@src@>\s*=\s*(<'[^']+'>|<"[^"]+">|<\S+>)`);
    console.log(src)
}

console.pause(
true);

也可以用新版的 string.html 解析,

import string.html;
import console;

var html = `
asdasds<img  3443   Src='http://xxx.com/1.jpg11'   >asdasdasda看了sds
<img b src="http://xxx.com/1.jpg22"   >asdasd
<img b SRC=http://xxx.com/1.jpg333   >asdasd
`
;

//解析HTML
var htmlDoc = string.html( html)

//获取所有img节点
var imgs = htmlDoc.queryEles( tagName = "img");

//遍历img
for i,img in table.eachIndex(imgs){
    console.log( img.getAttribute(
"src") )
}

console.pause()
我刚加的 getAttribute 函数,
可以支持忽略大小写查找src,Src,SRC....这种属性,不过一般应当没人会把HTML写成这样。

回复

使用道具 举报

3

主题

18

帖子

114

积分

一级会员

Rank: 2

积分
114
 楼主| 发表于 2018-5-25 09:56:13 | 显示全部楼层
谢谢作者的回复,又学习到一种新方法。我改进了我原来的代码,也实现了。改写为
  1. var pic1=string.gmatch(html,"\<[Ii][Mm][Gg]\s.*?[Ss][Rr][Cc]\s*=\p?([\w-\:\.\?\=/]*)\s*?\p?\s");
复制代码


这样也能匹配到。谢谢
回复

使用道具 举报

3

主题

18

帖子

114

积分

一级会员

Rank: 2

积分
114
 楼主| 发表于 2018-5-25 10:06:27 | 显示全部楼层

这是添加的干扰,是为了让代码在各种恶劣环境下正常工作,测试用的。
回复

使用道具 举报

3

主题

50

帖子

420

积分

培训班

积分
420
发表于 2018-5-25 13:42:28 | 显示全部楼层
feihu3033 发表于 2018-5-25 10:06
这是添加的干扰,是为了让代码在各种恶劣环境下正常工作,测试用的。

我要说的是匹配的范围,,你写的规则,你看下范围,当然只会返回一个
回复

使用道具 举报

3

主题

18

帖子

114

积分

一级会员

Rank: 2

积分
114
 楼主| 发表于 2018-5-26 16:47:28 | 显示全部楼层
nlysh007 发表于 2018-5-25 13:42
我要说的是匹配的范围,,你写的规则,你看下范围,当然只会返回一个

我测试也是,直接匹配到最后了,改了之后,就行了。谢谢了。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2018-12-11 18:51 , Processed in 0.062507 second(s), 25 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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