首页 > 解决方案 > Perl,按特定模式拆分字符串

问题描述

我发现了如何用空格分割字符串,但这只考虑了一个字符。就我而言,我将注释粘贴到包含换行符和空格的文件中。我用这个字符串分隔它们:[|]

所以我需要将我的 $string 拆分为一个数组,例如,其中 $string =

This is a comment.
This is a newline.    
This is the end[|]This is second comment.
This is second newline.    
[|]Last comment

被拆分为包含换行符和空格的 $array[0]、$array[1] 和 $array[2]。用 [|] 分隔

我在网上找到的每个示例都使用单个字符(例如空格或换行符)来拆分字符串。在我的情况下,我必须使用更具体的标识符,这就是为什么我选择 [|] 但在拆分它时遇到了麻烦。

我试图将其限制为通过单个“|”进行解析 带有此代码的字符:

my @words = split /|/, $string;
foreach my $thisline (@words) {
    print "This line = '" . $thisline . "'\n";

但这似乎将整个字符串逐个字符拆分为@words。

标签: perlparsing

解决方案


[, |, 和]都是正则表达式中的特殊字符——|用于分隔选项,[…]用于指定字符集。使用不带引号|的表达式使表达式匹配空字符串(更具体地说:空字符串或空字符串),使其在每个字符边界上匹配和拆分。必须对这些字符进行转义才能在表达式中按字面意思使用它们:

my @words = split /\[\|\]/, $string;

由于所有的行都使这在视觉上令人困惑,您可能应该使用m{}引号而不是//, 并\Q…\E引用一系列字符而不是每个字符的单独反斜杠。(这在功能上是相同的,只是更容易阅读。)

my @words = split m{\Q[|]\E}, $string;

推荐阅读