首页 > 解决方案 > 正则表达式匹配大于长度的字符串,但不包括结尾匹配

问题描述

正如标题所述,我正在寻找一个匹配大于给定长度的字符串的正则表达式,所以:

[\s\S]{51,}

所以以下将匹配:

Cras risus ipsum, faucibus ut, ullamcorper id, varius ac, leo.

以下不会:

Vestibulum volutpat pretium libero.

但是,我想要一个附加条件,即应从字符计数中排除出现在字符串末尾的特定字符序列。该序列本身可以由正则表达式定义。例如:

something\/[\w]+\/at-the-end\/[\d]+$

因此,以下内容仍应匹配:

Cras risus ipsum, faucibus ut, ullamcorper id, varius ac, leo.

以下内容仍然不应该:

Vestibulum volutpat pretium libero. something/random/at-the-end/12345

我在想,如果可能的话,它会以某种方式涉及环视,但我不知道我将如何构建它。我正在寻找使用单个正则表达式的解决方案。

标签: regexregex-lookarounds

解决方案


您可以尝试使用负前瞻来调整模式匹配:

^((?!at-the-end\/\d+)[\s\S]){51,}[\s\S]*$

演示

该模式背后的基本思想是,只要后面的不是,它将使用任何单个字符 at-the-end/然后是一个或多个数字,然后是字符串的末尾。


推荐阅读