大家好我有我在JavaScript中创建的正则表达式,现在我希望将它们放在ColdFusion中。我试图将其放入ColdFusion时遇到的问题很少,首先是空白值。如果我的变量为空,我的正则表达式输出false
。第二个问题是将这些正则表达式组合在一个大行中,该行将检查我的文本文件的整行。出于某种原因,我的正则表达式忽略了大小写。如果我只有小写,我的正则表达式输出为真,即使在这种情况下是不允许的。这是我的正则表达式:
<cfset fileRegex = "^(?i)^ *[a-z][a-z' .,-]{0,49} *\t(?i) *[a-z][a-z' .,-]{0,49} *\t *(0?[1-9]|1[0-2])\/(0?[1-9]|1\d|2\d|3[01])\/(19|20)\d{2} *\t(?i) *([M|F]) *\t(?i) *(0?[0-9]|1[0-2]|[A-Z]{1,2}) *\t *([^\t].{0,50}) *\t(?i) *([A-Z0-9 ,]{1,102})? *\t *\d{10} *(\t[^\t]*){22}\t *([0-9]{1,4}) *\t([^\t]*)(\t *[A-Z ',.-]{1,50} *)?$">
<cfset myData = "John Terry 1/29/1981 M 0 London NULL 0129198109 609 8000 1 England">
<cfif REFind(fileRegex,myData,true) GT 0>
true<br>
<cfelse>
false<br>
</cfif>
所以在这种情况下,我的数据集中的最后一个单词是England
,而我的正则表达式只能接受大写,但它没有,第二个问题是如果我将此字段留空,我会得到False
返回。这最后一个字也是可选的,如果我将它与标签一起删除,我应该true
。如果有人可以帮助解决这个问题,请告诉我。
答案 0 :(得分:2)
您的正则表达式需要22列(\t[^\t]*){22}
。您可以将它们设为可选项( - &gt; (\t[^\t]*){0,22}
),并且正则表达式基本上可以正常工作:
(?i)^ *[a-z][a-z' .,-]{0,49} *\t *[a-z][a-z' .,-]{0,49} *\t *(0?[1-9]|1[0-2])\/(0?[1-9]|1\d|2\d|3[01])\/(19|20)\d{2} *\t *([MF]) *\t *(0?[0-9]|1[0-2]|[A-Z]{1,2}) *\t *([^\t].{0,50}) *\t *([A-Z0-9 ,]{1,102})? *\t *\d{10} *(\t[^\t]*){0,22}\t *([0-9]{1,4}) *\t([^\t]*)(\t *[A-Z ',.-]{1,50} *)?$
请参阅regex demo
一些较小的增强功能:
(?i)
,这是没有必要的。模式开头的一个(?i)
就足够了。 |
内的[M|F]
应该被删除,因为它被解析为文字管道符号。 [M|F]
匹配3个字符中的1个:M
,|
或F
。
/
是否真的应该被转义,我怀疑它是否需要转义,因为这里没有正则表达式分隔符。