理解这些正则表达式

时间:2013-09-10 16:51:53

标签: regex coldfusion coldfusion-8

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

<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

我不明白正则表达式试图实现的目标。

1 个答案:

答案 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是必需的。)