如何解析标签之间的所有文本

时间:2013-07-02 16:56:36

标签: regex html-parsing regex-greedy

我首先尝试搜索Stackoverflow,看看我是否能找到我正在尝试使用正则表达式的解决方案,但我不知道如何问这个问题。事实上,我不确定我是否正确地表达了我的问题......

基本上我正在尝试做一个非常简单的正则表达式搜索并省略。

                <tr>
            <td><input type="checkbox" name="country" id="chkCountry" checked="1" disabled="1"></td>
            <td><label for="chkCountry">Country</label></td>
            <td><label for="chkCountry">UNITED STATES</label></td>
        </tr>

我想从这些标签之间解析文本“UNITED STATES”,而不会得到“国家”字样:

<td><label for="chkCountry"></label></td>

我已经设置了我的正则表达式来执行匹配前缀和后缀,但是使用表达式将它们从捕获中排除:

    (?<=<td><label for="chkCountry">).*?(?=</label></td>)

这将抓住我上面提到的两个词。我如何制定这个表达式只能抓住“美国”?

文本“Country”是静态的并且将始终存在,但文本“UNITED STATES”总是与其他国家/地区名称填充文本。所以基本上我想要刮掉那里出现的国家。

我事先感谢你的帮助。

2 个答案:

答案 0 :(得分:0)

<[^<]+?>&lt; - 这是html标签正则表达式

所以,你只需要用空字符串“”替换这个正则表达式(<[^<]+?>)|(Country),那将只留下你的“UNITED STATES”

答案 1 :(得分:0)

如果您需要使用正则表达式完全执行此操作,请尝试使用negative lookahead(?!)构造):

(?<=<td><label for="chkCountry">)(?!Country).*?(?=</label></td>)

(?!Country) - 这是一个负面的预测。像所有的前瞻和外观一样,它是一个零宽度的断言,这意味着它匹配字符之间的位置而不是字符本身的模式。

所以这匹配“字符串中没有Country后面的位置”。正则表达式引擎必须向前看来确定这一点。

请注意,如果您有一个名为CountryTown的国家/地区,那么完整的正则表达式将无法匹配,因为否定前瞻将失败。