我对这个正则表达式有点麻烦:
<img(.+)src="_image/([0-9]*)/(.+)/>
全局和不区分大小写的标志已启用。
问题在于它还会抓取Image n(请参阅下面的字符串),但我希望它只匹配字符串中的图像标记。
<p>Image 1:<img width="199" src="_image/12/label" alt=""/> Image 2: <img width="199" src="_image/12/label" alt=""/><img width="199" src="_image/12/label" alt=""/></p>
如果我在图像n之前放置一个换行符,它可以工作:)
有人能指出我做错了吗?
提前致谢 鲍勃
答案 0 :(得分:1)
使用非贪婪的正则表达式:
&lt; img。? SRC =“_图像/(\ d +)/ / &GT(+。);?
答案 1 :(得分:1)
如果我正确解释你的正则表达式,看起来你是在第一组中的目录名和第二组中的文件路径之后?
<IMG.*?SRC="/_image/(\d+?)/([^"]*?)".*?/>
不要忘记使用正则表达式选项CaseInsensitive包装正则表达式(?i:[regex])
在第二组中,你正在解析所有不是结束的东西“,现在你正在寻找所有角色,事实上,你不需要搜索所有角色,你想要的一切都不是字符串上的结束语。
此外,不要忘记关闭您丢失的SRC字符串,并且SRC属性可能不是标记中的最后一个 - 例如边框,宽度,高度等。此外,可能有任何数字关闭最后一个属性和标记结束后的空格/&gt;
从这个正则表达式,你的第一个匹配组将保存子目录名称,第二个匹配组将保存子目录的/后面的所有内容 - 包括嵌套的子目录。如果你有嵌套的子目录,你可能需要稍微扩展一下:
<IMG.*?SRC="/_image/((\d+?)/)+?([^"]*?)".*?/>
在这种情况下,每个前导组将保存每个嵌套目录名称,最后一个组将保存文件名。
答案 2 :(得分:0)
你试过懒惰的评价吗?当我尝试类似的东西时,这种情况有所恢复。
答案 3 :(得分:0)
正则表达式在解析HTML方面根本不好(请参阅Can you provide some examples of why it is hard to parse XML and HTML with a regex?了解原因)。你需要的是一个HTML解析器。有关使用各种解析器的示例,请参阅Can you provide an example of parsing HTML with your favorite parser?。
答案 4 :(得分:0)
你正在使用贪心量词(+)而没有太多限制。一个贪婪的量词正在告诉正则表达式引擎:“抓住每个符合资格的角色,并且只能退出足以完成正则表达式。”这意味着它将从字符“image / nnnnnn / 某些 /”的第一个序列中获取。