0

有一个变量设置如下(通过自定义标签调用)

<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

我不明白这两个正则表达式都试图实现什么。

4

1 回答 1

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 ],因此这将删除空格和制表符与将其转换为数组相结合。
(请注意,由于它通过查找换行符来工作,因此trimon GeneratedContent 对于删除任何前面/后面的空格是必需的。)

于 2013-09-10T22:46:06.660 回答