1

我需要一些帮助来在 ColdFusion 应用程序中构建正则表达式。如果有人问过这个问题,我很抱歉。我已经搜索过了,但我可能没有要求正确的东西。

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

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

问题编号仅包含数值,并且应该正好是 5 位数字。这是有效的,除非字符串中出现更长的数字,例如 34512345。它也将该字符串的前 5 位数字作为有效的问题编号。

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

谢谢你。

4

1 回答 1

6

排除在匹配之前/之后出现的内容的一般方法是在匹配之前使用否定的lookbehind,然后使用否定的lookahead。对数字执行此操作将是:

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

\d(的简写在哪里[0-9]

CF 的正则表达式支持前瞻,但不幸的是不支持后视,因此这不会直接在重新匹配中起作用 - 但是在这种情况下这可能并不重要,因为您可能不希望abc12345匹配任何一个 - 所以你更可能想要的是:

\b\d{5}\b

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

由于您不处理大小写,因此您不需要 nocase 变量并且可以简单地编写:

rematch( '\b\d{5}\b' , mailCheck.subject )

与简单地检查空格相比,这样做的好处是结果是五位数(无需修剪),但缺点是它会匹配诸如[12345]or3.14159^2可能不是您想要的值?

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

rematch( '(?:^| )\d{5}(?= |$)' , mailCheck.subject )

然后对每个结果使用修剪以删除空格。

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

于 2013-07-22T12:41:25.340 回答