有一个变量设置如下(通过自定义标签调用)
<cfset str = Trim( THISTAG.GeneratedContent ) />
THISTAG.GeneratedContent的内容类似于
FNAME|MNAME|LNAME Test|Test|Test
我无法理解的代码如下:
<cfset str = str.ReplaceAll(
"(?m)^[\t ]+|[\t ]+$",
""
) />
<cfset arrRows = str.Split( "[\r\n]+" ) />
上面的代码行应生成内容为
的数组arrRows[1] = FNAME|MNAME|LNAME
arrRows[2] = Test|Test|Test
但是在转储数组时会显示以下输出:
FNAME|MNAME|LNAME Test|Test|Test
我不明白正则表达式试图实现的目标。
答案 0 :(得分:3)
这一个......
<cfset str = str.ReplaceAll(
"(?m)^[\t ]+|[\t ]+$",
""
) />
..删除位于行的开头或结尾的所有制表符/空格。 (?m)
启用多行模式,导致^
匹配“行首”(与其通常的“内容开始”相对),类似地$
表示“行尾” (而不是“内容结束”)在这种模式下。
这一个......
<cfset arrRows = str.Split( "[\r\n]+" ) />
...通过拆分连续回车符和/或换行符的任意组合,将行转换为数组。
奖励信息
您实际上可以将这两个正则表达式合并为一个,如下所示:
<cfset arrRows = str.split( '\s*\n\s*' ) />
\s
将匹配任何空格字符 - 即[\r\n\t ]
,因此将空格和制表符的删除与将其转换为数组相结合。
(请注意,由于它通过查找换行符来工作,因此对于要删除的任何前置/尾随空格,GeneratedContent上的trim
是必需的。)