0

您能否提供一个正则表达式来输出重复价格的结果?对于 html 标签中的任何内容,这可能是通用含义,而不仅仅是价格。

即这是刮价格的规则:

<strong class="bigprice">(.+?)</strong>

规则的输出:“£4.99”“£4.99”(您可以看到结果是重复的,因为在源代码中有两个相同的标签后跟结果。)

我只希望显示第一个结果而不是两者,无论如何在正则表达式中这样做?

4

1 回答 1

1

描述

给定一个以空格分隔的值列表,例如£1.00 £2.00 £2.00 £1.00 £1.00,您可以通过使用否定前瞻来查找反向引用值来验证是否存在重复项。我还在$字符类中添加了一个和符号以允许多种货币类型。这将返回每个值的最后一个实例,这实质上使输出唯一。

正则表达式:(?:\s|^)((?:£|$|\xC2|\xA3)\d+\.\d{1,2})(?=\s|$)(?!.*?\s\1(?=\s|$))

在此处输入图像描述

输入:£1.00 £2.00 £2.00 £1.00 £1.00 示例链接

$matches Array:
(
    [0] => Array
        (
            [0] =>  £2.00
            [1] =>  £1.00
        )

    [1] => Array
        (
            [0] => £2.00
            [1] => £1.00
        )

)

因此,我们可以将这个想法更进一步,包括您的测试表达式<strong class="bigprice">(.+?)</strong>,以防止(.+?). 由于这看起来像 html 我将替换.+?匹配所有字符的[^<]*匹配所有字符直到下一个开放尖括号

正则表达式:(?:<strong\s(?=[^>]*class="bigprice")[^>]*>)\s*((?:£|$|\xC2|\xA3)\d+\.\d{1,2})\s*<\/strong>(?!.*?(?:<strong\s(?=[^>]*class="bigprice")[^>]*>)\s*\1\s*<\/strong>)

在此处输入图像描述

输入:<strong class="bigprice">£1.00</strong><strong class="bigprice">£2.00</strong><strong class="bigprice">£1.00</strong> 示例链接

$matches Array:
(
    [0] => Array
        (
            [0] => <strong class="bigprice">£2.00</strong>
            [1] => <strong class="bigprice">£1.00</strong>
        )

    [1] => Array
        (
            [0] => £2.00
            [1] => £1.00
        )

)

概括

在这两种情况下,如果在输入文本中发现重复值,则表达式将失败。

于 2013-06-11T15:21:07.993 回答