【问题标题】:QRegExp problemQRegExp 问题
【发布时间】:2010-12-17 14:34:01
【问题描述】:

我写了

QRegExp rx("<img src=\"\\S+\"\\s+width=\"(\\d+)\"\\s+height\"(\\d+)\"\\s+/>");

正则表达式以匹配

 <img src="file://c/Users/Narek/Desktop/WClub.jpg" width="95" height="113.04" />

字符串中的一种子字符串,以提取宽度和高度。但这不匹配。请告诉我我做错了什么。

【问题讨论】:

  • 一个小提示是,使用正则表达式处理 HTML 通常被认为是一个坏主意。例如,请参阅stackoverflow.com/questions/2179477/…,了解如何在 Qt 中解析 HTML。
  • 此链接仅供解析,但我解析是为了编辑,所以我不觉得上面写的问题中提出的方法很方便。可能有比 QRegExp 更好的方法,但不是这个。

标签: c++ regex qt qregexp


【解决方案1】:

\d 与您身高中的句点不符。

一个可行的正则表达式是这样的:

<img src=\"[^"]*\"\s+width=\"(\d+(?:\.\d+)?)\"\s+height=\"(\d+(?:\.\d+)?)\"\s+/>

另外,必须注释它是bad idea to parse HTML using Regex

【讨论】:

  • 是的,没错,但即使是 也不能匹配:(
  • @Joel:谢谢,我也忘记了捕获组。这就是为什么人们应该使用 HTML 解析器,对吧? :)
  • @Narek:小数点和后面的数字是可选的。这就是非捕获组(?:\.\d+)? 所做的。
  • 这是迄今为止最好的答案。 \"[^"]*\" 的替代方法是调用 setMinimal(true) 以使量词不贪婪。
【解决方案2】:

最后一个\d 没有考虑数字内的点,你在'height'后面缺少'='。

【讨论】:

    【解决方案3】:

    怎么样:

    QRexExp rx("<img src=[^<]+/\> ");
    

    希望对你有帮助!

    【讨论】:

    • 抱歉,我在显示 节点时遇到了问题 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-16
    相关资源
    最近更新 更多