我正在尝试编写一个模式,用于提取HTML中img标记中找到的文件的路径。
String string = "<img src=\"file:/C:/Documents and Settings/elundqvist/My Documents/My Pictures/import dialog step 1.JPG\" border=\"0\" />";
我的模式:
src\\s*=\\s*\"(.+)\"
问题是我的模式还会包含img标签的'border =“0”部分。
在不包含'border =“0”?
的情况下,该文件的URI路径匹配什么模式答案 0 :(得分:31)
你的模式应该是(非转义):
src\s*=\s*"(.+?)"
重要的部分是添加的问号,尽可能少地与组匹配
答案 1 :(得分:8)
试试这个表达式:
src\s*=\s*"([^"]+)"
答案 2 :(得分:8)
只有当它在标记内部而不是在其他地方以纯文本形式写入时,才能获取src。它还会检查您是否在src属性之前或之后添加了其他属性。
此外,它还确定您使用的是单引号(')还是双引号(“)。
\<img.+src\=(?:\"|\')(.+?)(?:\"|\')(?:.+?)\>
因此对于PHP,你会这样做:
preg_match("/\<img.+src\=(?:\"|\')(.+?)(?:\"|\')(?:.+?)\>/", $string, $matches);
echo "$matches[1]";
对于JavaScript,你会这样做:
var match = text.match(/\<img.+src\=(?:\"|\')(.+?)(?:\"|\')(?:.+?)\>/)
alert(match[1]);
希望这有帮助。
答案 3 :(得分:1)
我正在尝试编写一个模式,用于提取HTML中img标记中找到的文件的路径。
我们是否可以拥有“不使用正则表达式来解析[X] HTML”的自动回复?
问题是我的模式还会包含img标签的'border =“0”部分。
更不用说'src =“'出现在纯文本中了!
如果您事先知道要解析的HTML的确切格式(例如,因为您自己生成了它),您可以侥幸逃脱。但除此之外,正则表达式完全是错误的工具。
答案 4 :(得分:0)
你想玩贪婪的群体捕捉形式。像
这样的东西 src\\s*=\\s*\"(.+)?\"
默认情况下,正则表达式会尝试匹配尽可能多的
答案 5 :(得分:0)
我想扩展此主题,因为src
属性通常不加引号,因此正则表达式采用引用和不带引号的src
属性为:
src\s*=\s*"?(.+?)["|\s]
答案 6 :(得分:0)