如何匹配正则表达式列表中的n项?

时间:2017-01-27 10:59:20

标签: regex

我正在尝试匹配项目列表中的n个元素:

(one|two|three|four|five|six|seven|eight|nine|ten|eleven|twelve|thirteen|fourteen|fifteen|sixteen|seventeen|eighteen|nineteen|twenty|thirty|forty|fifty|sixty|seventy|eighty|ninety|hundred|thousands|million|billion){6}

我想检查上面列表中有多少项存在于字符串中。怎么能实现呢?

例如,我想检查字符串是否包含列表中的任何6:

$item[] = array(
                'meal_type' => $meal_type,
                'meal_package' => $meal_package,
                'meal_time' => $meal_time,
                'meal_plan_days' => $meal_plan_days,
                'meal_dish_type' => $meal_dish_type,
                'prefixed_qty' => $prefixed_qty,
                'prefixed_date' => $prefixed_date,
                'cart_plan' => $cart_total,
                'product_rule' => $product_rule
                );

$_SESSION['shopping_cart']['item'] = array_merge($_SESSION['shopping_cart']['item'], $item);

1 个答案:

答案 0 :(得分:3)

您只需添加将使用您不想匹配的令牌的通配符:

\b

通过这种方式,您将匹配搜索令牌的6次出现以及介于两者之间的任何事件。

我还添加了单词边界(.*),以避免匹配部分单词(“诚实”中的“一”)。

请注意,您无法确保搜索令牌不超过6个,因为即使使用锚点,<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Opacity="0.4" Color="Silver" /> 也会消耗额外的令牌。但是,如果搜索的标记少于6个,则不匹配。

Regex101Rad Lexus提供。