从html元素中提取属性值

时间:2013-02-20 15:55:52

标签: regex

现在已经挣扎了几个小时......

我有以下正则表达式:

(?<=\bdata-video-id=""."">)(.*?)(title=.*?>)

以下输入:

         <div class="cameras">            
            <table class="results">
                <colgroup>
                    <col class="col0">
                    <col class="col1">
                </colgroup>
                <thead>
                    <tr>
                        <th title="Name">
                            Name
                        </th>
                        <th title="Date">
                            Date
                        </th>
                    </tr>
                </thead>
                <tbody>
                    <tr data-video-id="1">
                        <td title="149 - Cam123">
                            149 - Cam123
                        </td>
                        <td title="Feb 18 2013">
                            Feb 18 2013
                        </td>
                    </tr>
                    <tr data-video-id="2">
                        <td title="150 - Cam456">
                            150 - Cam456
                        </td>
                        <td title="Feb 18 2013">
                            Feb 18 2013
                        </td>
                    </tr>                   
                </tbody>
            </table>
        </div>

正则表达式输出:

<td title="149 - Cam123">
<td title="150 - Cam456">

但我想得到的是每个表格行中 1st 单元格的title属性的内容:

149 - Cam123
150 - Cam456

行数可能明显不同,但列数是固定的。 请帮我调整上面的正则表达式。 感谢

注意:解决方案必须是正则表达式。我无法访问代码库,因此无法使用HTML解析器或任何其他类型的代码干预。我可以挂钩到应用程序的唯一方法是注入一个不同的正则表达式。

1 个答案:

答案 0 :(得分:0)

根据OP要求它必须是正则表达式,那么我的建议是在内部标题信息中添加一个组包装器:

(?<=\bdata-video-id=""."">).*?title="(.*?)">

否则,一般解决方案是不使用正则表达式:

为什么使用正则表达式?由于标签的复杂性,典型的解决方案是使用HTML解析器

Here is a SO about this topic

Here is another even more popular response on using regex for XHTML

指出了

Jeff Atwood in this blogpost