【问题标题】:Why is split on `|` (pipe) not working as expected?为什么 `|` (管道)上的拆分没有按预期工作?
【发布时间】:2011-07-24 18:17:05
【问题描述】:

我有一个要拆分的字符串。但是分隔符是在运行时确定的,所以我需要将它作为变量传递。

my @fields = split(/$delimiter/,$string); 之类的东西不起作用。有什么想法吗?


输入:

abcd|efgh|23

预期输出:

abcd
efgh
23

【问题讨论】:

  • 您的输入、实际输出和预期输出将是非常有用的信息...
  • 你没有一个“分隔符”,你有一个“分隔符”。 “分隔符”标记了限制,即。它在两端,就像双引号一样。 “分隔符”位于元素之间,例如“|”在您的示例输入中。
  • 感谢这帮助我解决了我正在处理的问题

标签: perl variables split separator


【解决方案1】:

您需要转义分隔符,因为它是正则表达式中的特殊字符。

选项 1:

$delimiter = quotemeta($delimiter);
my @fields = split /$delimiter/, $string;

选项 2:

my @fields = split /\Q$delimiter/, $string;

【讨论】:

  • 有关更多信息,请参阅:perldoc perlretutperldoc perlre 并搜索 /\\Q/ 并参阅perldoc -f quotemeta
  • split 的参数不是分隔符,而是分隔符。
  • 不是根据perldoc -f split:“任何匹配 PATTERN 的东西都被视为分隔字段的分隔符。”
猜你喜欢
  • 1970-01-01
  • 2018-04-05
  • 2014-08-04
  • 2021-01-03
  • 2018-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多