ColdFusion Regex匹配精确长度的数字

时间:2013-07-22 12:25:07

标签: regex coldfusion cfml

我需要一些帮助在ColdFusion应用程序中构建正则表达式。如果有人问我,我道歉。我搜索过,但我可能不会要求正确的事情。

我正在使用以下内容搜索问题编号的电子邮件主题行:

reMatchNoCase("[0-9]{5}", mailCheck.subject)

问题编号仅包含数字值,应精确为5位数。这是有效的,除非我在字符串中出现更长的数字,例如34512345.它还将该字符串的前5位数作为有效的问题编号。

我想要的只是检索5位数字,没有更短或更长。然后我将这些放入一个循环和处理的列表中。我是否需要在正则表达式中包含前后空格以获得所需的结果?

谢谢。

1 个答案:

答案 0 :(得分:6)

在匹配之前/之后排除发生内容的一般方法是在比赛之前使用负面后视,之后使用负前瞻。要对数字进行此操作将是:

(?<!\d)\d{5}(?!\d)

(其中\d[0-9]

的简写

CF的正则表达式支持前瞻,但不幸的是不是后视,所以这不会直接在复赛中起作用 - 但是在这种情况下这可能无关紧要,因为它可能是你不想要的,例如{{1}要么匹配 - 所以你更想要的是:

abc12345

\b\d{5}\b 是“单词边界” - 粗略地说,它检查“单词字符”和非单词字符之间的变化(反之亦然) - 所以在这种情况下第一个{{1}将检查在第一个数字之前没有\b之一,并且第二个\b将检查在第五个数字之后没有一个[a-zA-Z0-9_]\b不会在匹配中附加任何字符(即它是零宽度断言)。

由于你没有处理case,你不需要nocase变量,只需写:

\b

这样做的好处就是简单地检查空格是结果是五位数(不需要修剪),但缺点是它会匹配rematch( '\b\d{5}\b' , mailCheck.subject ) [12345]之类的值。可能不是你想要的?

要检查空格或字符串的开头/结尾,您可以执行以下操作:

3.14159^2

然后在每个结果上使用trim以删除空格。

如果那不是您所追求的,请继续并提供更多详细信息。