【问题标题】:PCRE: (+) and (-) look ahead/behind (Regex)PCRE:(+)和(-)向前/向后看(正则表达式)
【发布时间】:2011-09-03 03:58:08
【问题描述】:

我有以下字符串:

<A href="CarPage.asp?parent=CAR123+++&Color=RED">The Car is Red - Its Fast</a>

我想提取:

  • CAR123
  • 红色
  • 这辆车是红色的 - 速度很快

到目前为止我所拥有的是:

(?<=<A href="CarPage\.asp\?parent=)[A-Za-z0-9]*(\+\+\+&Color=)[A-Za-z0-9]{3}(\">)[A-Za-z0-9\- ]*(?=</a>)

但是当它们不在字符串边界上时,我不确定如何设置正负前瞻和后瞻。

我知道,它是 HTML...我以前听说过...“不要使用正则表达式解析 html...” 我不需要比这更详细的了。

感谢您的帮助。

谢谢!

【问题讨论】:

    标签: html regex pcre lookbehind lookahead


    【解决方案1】:

    最好使用解析器,但如果您的链接始终以完全相同的方式格式化(没有 id、类、额外参数、不同顺序的参数等,请尝试:

    parent=(\w+?)\+*&Color=(\w+?)">(.*?)<
    

    与穆的建议不同的是贪心。

    【讨论】:

    • 确实,贪婪才是最重要的。谢谢!
    【解决方案2】:

    你不需要任何复杂的东西,你可能会摆脱这个:

    /parent=(\w+).*Color=(\w+).*>(.*)</
    

    然后将零件从$1$2$3 中拉出。您可能需要稍微收紧.* 部分,具体取决于您的实际输入的可变性。

    例如,Perl 的这一点:

    my $s = '<A href="CarPage.asp?parent=CAR123+++&Color=RED">The Car is Red - Its Fast</a>';
    $s =~ /parent=(\w+).*Color=(\w+).*>(.*)</;
    print join("\n", $1, $2, $3), "\n";
    

    输出:

    CAR123
    RED
    The Car is Red - Its Fast
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多