RegEx:模式中的匹配模式 - 我想我需要使用Positive Lookbehinds?

时间:2011-02-01 00:10:36

标签: regex lookbehind

我正在尝试使用RegEx在模式中查找模式。具体来说,我想要做的是将URL捕获到引用中,并在其中搜索最后一个=符号后面的所有内容并捕获它。

所以给这个字符串

<a href="http://my.domain.com/?s_cid=EM&s_ev9=CMC21892&s_ev10=EM_CMC21892_LC_stuff" style="color: #365EBF:">stuff</a>

我最初会找到

href="http://my.domain.com/?s_cid=EM&s_ev9=CMC21892&s_ev10=EM_CMC21892_LC_stuff"

使用此RegEx:href="(https?[^"]*)"

从那里我可以解析实际的字符串(当查看捕获的组时)我正在寻找EM_CMC21892_LC_stuff这个:=[^"=]*$

虽然当我尝试将两者结合起来在一个RegEx中完成它时,我没有成功。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

他是对的,使用正则表达式来解析HTML只是在寻找麻烦。

那就是说,试试href="http[^"]+=([^"]+?)"

答案 1 :(得分:0)

我同意Mark Byer关于使用现有的html / url解析函数而不是正则表达式的评论(尽管你没有指定使用哪种语言,所以我们无法真正帮助...)

但是,如果你坚持用正则表达式方式,这是一个模式:

/href="([^"]*=([^"]*))"/

编辑添加:这里是结果会是什么样的,不确定你是否仍然想要捕获完整的url或只是最后一个param值,但是这个模式捕获了两者:

Array
(
    [0] => Array
        (
            [0] => href="http://my.domain.com/?s_cid=EM&s_ev9=CMC21892&s_ev10=EM_CMC21892_LC_stuff"
        )

    [1] => Array
        (
            [0] => http://my.domain.com/?s_cid=EM&s_ev9=CMC21892&s_ev10=EM_CMC21892_LC_stuff
        )

    [2] => Array
        (
            [0] => EM_CMC21892_LC_stuff
        )

)