Regex Perl正则表达式问题

Regex Perl正则表达式问题,regex,perl,Regex,Perl,我在尝试一个随机正则表达式: $string = "sajdk3:jdk3:jdk3:dgklmhij"; @arr = split(/([\da-z]+)([:;])\1\2\1/, $string); # As per my understanding of RegEx, the given pattern shall match jdk3:jdk3:jdk3 # So @arr must contain two scalar values: 'sa' and ':dgklmhij' #

我在尝试一个随机正则表达式:

$string = "sajdk3:jdk3:jdk3:dgklmhij";
@arr = split(/([\da-z]+)([:;])\1\2\1/, $string);

# As per my understanding of RegEx, the given pattern shall match jdk3:jdk3:jdk3
# So @arr must contain two scalar values: 'sa' and ':dgklmhij'
# But when I printed @arr I got something else
print "Array: @arr\nNumber of items: ", scalar @arr;
#Array: sa jdk3 : :dgklmhij
#Number of items: 4

# So, I tried: 
$string =~ /([\da-z]+)([:;])\1\2\1/;
print "\n( $1 ) ( $2 )\n";
print "($`)($&)($') \n";
# ( jdk3 ) ( : ) (  ) (  ) (  ) 
# (sa)(jdk3:jdk3:jdk3)(:dgklmhij) 
有人能解释为什么数组有4个元素而不是2个元素吗

好的,在解释了@mpapec之后,我很好奇如何实现它。 在
split
param中不可避免地要有一个捕获组时,该怎么办。 就像你想要分割一个日期,可以是
12-05-92
26.11.87
07 04 92

有人能解释为什么数组有4个元素而不是2个元素吗

分割时也会捕获分隔符,因此有4个元素而不是2个

如果模式包含捕获组,则对于每个分隔符,将为组捕获的每个子字符串生成一个附加字段


使用第一个正则表达式作为拆分的第一个参数。在第二个示例中,您没有这样做。你在比较苹果和橙子。从技术上讲,
split
不是寻找分隔符(包围事物),而是寻找分隔符(它们之间的分隔符)。插入语句由开括号和闭括号分隔,类似的列表用逗号分隔,句子以句号结尾。奇怪的是,当哨兵像终结者一样出现在某物的前面时,我不知道它叫什么。@innaM我只是有一个
分裂
。“第二个例子”指的是什么?您的意思可能是
$string=~/([\da-z]+)([:;])\1\2\1/
拆分
没有像我预期的那样工作时,我试图打印perl对我的正则表达式的解释。仅此而已。
split/\D/,$date应该适用于您的示例