正则表达式语法 - 帮助

时间:2009-08-31 23:26:39

标签: c++ regex boost

我需要处理HTML内容并将IMG SRC值替换为实际数据。为此我选择了正则表达式。

在我的第一次尝试中,我需要找到IMG标签。为此,我使用以下表达式:

<img.*src.*=\s*".*"

然后在IMG标签内我正在寻找SRC =“...”并将其替换为新的SRC值。我使用以下表达式来获取SRC:

src\s*=\s*".*"\s*

第二个表达式有问题:

以下文字适用:

<img alt="3D&quot;&quot;" hspace=
    "3D0" src="3D&quot;cid:TDCJXACLPNZD.hills.jpg&quot;" align=
    "3dbaseline" border="3d0" />

但对于以下情况,它不会:

<img alt="3D&quot;&quot;" hspace="3D0" src=
    "3D&quot;cid:UHYNUEWHVTSH.lilies.jpg&quot;" align="3dbaseline"
    border="3d0" />

表达式返回

会发生什么
src="3D&quot;cid:TDCJXACLPNZD.hills.jpg&quot;" align=
    "3dbaseline"

它不会按预期返回src部分。

我正在使用C ++ Boost正则表达式库。

请帮我解决问题。

谢谢, 希尔米。

2 个答案:

答案 0 :(得分:2)

问题是.*是一个“贪婪”的匹配 - 它会尽可能多地抓取文本,同时仍允许正则表达式匹配。你可能想要的是这样的:

src\s*=\s*"[^"]*"\s*

只会匹配src字符串中的非双引号字符,因此不会超过结束的双引号。

答案 1 :(得分:0)

您的第一个正则表达式对我的示例文本不起作用。在寻找特定的HTML标签时,我通常会使用它:

<img[^>]*>

另外,请尝试使用第二个表达式:

src\s*=\s*"[^"]*"\s*

这有帮助吗?