【问题标题】:What Yahoo Pipes regex use in this case?在这种情况下,Yahoo Pipes 正则表达式使用什么?
【发布时间】:2011-11-01 05:13:12
【问题描述】:

您对如何更改项目有任何想法吗? Yahoo.pipes 这个链接中的描述

<img src="http://mysite.com/img/pc/image.gif" class="big" style="background-image:url(http://mysite.com/pre_big_crop/pic/pc/gallery/dd/c1/example.jpeg);" alt="" title="">

到这里

<img src="http://mysite.com/pre_big_crop/pic/pc/gallery/dd/c1/example.jpeg"/>

使用正则表达式。

【问题讨论】:

    标签: regex pipe yahoo


    【解决方案1】:

    我不知道 RegEx Pipes 使用什么变体,所以我将使用 .NET 变体,您可以根据需要调整任何语法。应该很接近了。

    搜索:

    <img[^>]+url\(
    ([^\)]+)
    \)[^>]+>
    

    替换为:

    <img src="$1" />
    

    加入行列。第 1 行在 CSS 样式属性中查找直到 url 参数的图像标记。第 2 行匹配背景图像 URL 并捕获它。第 3 行匹配图像标签的其余部分。

    【讨论】:

      【解决方案2】:

      这是一个非常简单的正则表达式,可以使用 PERL 风格的正则表达式完成您正在寻找的内容:

      <img.*background-image:url\((.*)\);.*>
      

      基本上,这里是它如何匹配的细分:

      1. 它将首先匹配字符“
      2. 然后它匹配任何字符,介于 0 和无限次之间。
      3. 然后匹配字符串“background-image:url(
      4. 然后它匹配任何字符,介于 0 和无限次之间,被捕获到反向引用 #1
      5. 然后匹配字符“);”
      6. 然后它匹配任何字符,介于 0 和无限次之间。
      7. 然后它匹配“>”字符。

      注意:您应该将匹配任何字符的项目替换为更具体的内容,具体取决于您使用正则表达式的应用程序。这就是为什么我将其称为“非常简单”。

      然后,替换为:

      <img src="$1">
      

      编辑:没有看到richardtallent 的回答,非常相似的应用程序只是不同的实现。

      【讨论】:

      • 是的,它们很相似,但是您的模式中存在一些小问题:如果输入在同一行上有多个 IMG 标签,则只有 last 标签的背景图像将被捕获。此外,如果该行在最后一个背景 url 之后还包含另一个 ),则捕获将包含的不仅仅是 URL。这两者都是由于 .* 过于贪婪(至少它在 .NET 中,自从我在 Perl 中完成任何正则表达式以来已经很久了)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多