首页 > 解决方案 > 如何在 perl 中使用 \e 元字符拆分字符串?

问题描述

我需要从分隔符可能是三个字符之一的变量中拆分字符串:

;-或- -或,-\e

我可以逃脱;,但逃脱\e让我感到不适。

数据如下:

joe@gmail.com,joe@xyz.com,joe@isp.net

fred@123.com;fred@gmail.com

suzy@yahoo.com\esuzy@abc.com

我首先匹配一些字符串,如果为真,则将数据放入数组中,并在任何分隔符匹配时拆分:

if($ax=~/abc.com|xyz.com|123.com/) {
  my @addr=split /[\;,\\\e]/, $ax;
  ...
}

这种情况下的输出给了我:

'joe@gmail.com',
'joe@xyz.com',
'joe@isp.net'

'fred@123.com',
'fred@gmail.com'

'suzy@yahoo.com',
'esuzy@abc.com'  <--- Note the 'e'

正则表达式让我感到焦虑。

标签: perlsplit

解决方案


\e不是字符,它是代表字符的转义码。如果您的文本包含字面意思\e,那么这是两个字符,并且一个字符类(中的部分[])只能匹配一个字符,在这种情况下它匹配反斜杠。

您可以使用交替匹配多个任意长度的字符串:

/[;,]|\\e/

推荐阅读