正则表达式:有没有一种方法可以设置模式的最大大小?

6
例如,如果我有一个字符串:
0123456789 我可以写出如下的表达式:
0.*9 WHERE PATTERN MAX SIZE is 3。 在这种情况下,模式应该失败。

2
所以您正在寻找数字零、任何字符和数字九,且该模式只能匹配一个三个字符的字符串? - BoltClock
2
也许您可以提供一个必须匹配的字符串列表和一个不得匹配的字符串列表。 - BoltClock
3个回答

6
您的例子的具体解决方案是:
/^0.?9$/

你抽象问题的通用解决方案是:

/^(?=.{0,3}$)0.*9$/

在上面的代码中,(?=.{0,3}$)是一个先行断言,表示字符串的剩余部分长度在0到3之间。

1
很好...从未想过使用前瞻来限制字符串长度,尽管在正则表达式之外这样做可能会更容易。 - mpen

5

x{min,max}将匹配x出现min到max次。
x{min,}将匹配至少出现min次的x。
x{,max}将匹配最多出现max次的x。
x{n}将恰好匹配n次的x。

所有范围都是包括在内的。

快捷方式:{0,1} => ?, {0,} => *, {1,} => +

我不确定这是否完全符合您的需求,但它应该有助于构建您的正则表达式。

例如:^0\d{,3}9$将匹配由0开头、9结尾并且最多有5个数字的字符串。匹配项:03390631909。不匹配: 0334291449


似乎他需要\d{0,3} - atomizer
@atomizer 我认为他需要类似于 ^0\d?9$ 这样的东西,但不知道如何询问 :). - Alin Purcaru
@stefano 这个人做得更好:http://www.regular-expressions.info/reference.html - Alin Purcaru
我尝试更好地解释一下 :) 我应该创建一个小的正则表达式编辑器。用户将设置“最大模式大小”的字段, 因此,如果我写0.*, 当“最大模式大小”= 3时,正则表达式应该只考虑012而不是0123456789。 我希望我表述清楚了! - stefano m
@stefano m:你所说的“应该考虑”是什么意思?是指“应该接受”吗?你能否举个例子,展示出对于不同输入所期望得到的具体结果? - Mark Byers

1

听起来你想要程序化地修改正则表达式。

请指定您使用的语言(JS、Python、PHP 等)。

以下是使用 JavaScript 实现的方法:

sYourPattern    = '0.*9';
iPatternMaxSize = 3;

zRegex = new RegExp ('^(?=.{0,' + iPatternMaxSize + '}$)' + sYourPattern + '$');
alert (zRegex.test ('09') );


这将返回:

    '9'     --> 不匹配
    '09'    --> 匹配
    '009'   --> 匹配
    '0009'  --> 不匹配
    '19'    --> 不匹配

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接