dkn*_*ton 1 regex coldfusion cfml
我需要一些帮助在ColdFusion应用程序中构建正则表达式.如果有人问我,我道歉.我搜索过,但我可能不会要求正确的事情.
我使用以下内容搜索电子邮件主题行以查找问题编号:
reMatchNoCase("[0-9]{5}", mailCheck.subject)
Run Code Online (Sandbox Code Playgroud)
问题编号仅包含数字值,应精确为5位数.这是有效的,除非我在字符串中出现更长的数字,例如34512345.它还将该字符串的前5位数作为有效的问题编号.
我想要的只是检索5位数字,没有更短或更长.然后我将这些放入一个循环和处理的列表中.我是否需要在正则表达式之前和之后包含空格才能获得所需的结果?
谢谢.
在匹配之前/之后排除发生内容的一般方法是在比赛之前使用负面后视,之后使用负前瞻.要对数字进行此操作将是:
(?<!\d)\d{5}(?!\d)
Run Code Online (Sandbox Code Playgroud)
(\d速记在哪里[0-9])
CF的正则表达式支持前瞻,但遗憾的是不是后视,所以这不会直接在复赛中起作用 - 但是在这种情况下这可能并不重要,因为你可能不希望,例如,abc12345匹配任何一个 - 所以你是什么更可能的是:
\b\d{5}\b
Run Code Online (Sandbox Code Playgroud)
哪里\b是"单词边界" - 粗略地说,它检查"单词字符"和非单词字符之间的变化(反之亦然) - 所以在这种情况下,第一个\b将检查在第一个[a-zA-Z0-9_]之前没有数字,第二个\b将检查第五个数字后面是否有一个数字.A \b不会在匹配中附加任何字符(即它是零宽度断言).
由于您没有处理大小写,因此您不需要nocase变量,只需编写:
rematch( '\b\d{5}\b' , mailCheck.subject )
Run Code Online (Sandbox Code Playgroud)
简单地检查空格的好处是结果是五位数(不需要修剪),但缺点是它会匹配诸如[12345]或者3.14159^2可能不是你想要的值?
要检查空格或字符串的开头/结尾,您可以执行以下操作:
rematch( '(?:^| )\d{5}(?= |$)' , mailCheck.subject )
Run Code Online (Sandbox Code Playgroud)
然后在每个结果上使用trim来删除空格.
如果那不是您所追求的,请继续并提供更多详细信息.