我正在尝试随机正则表达式:
$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
参数中,不可避免的是拥有捕获组时应该做什么。就像您想分割一个日期,可以是
12-05-92
或26.11.87
或07 04 92
。 最佳答案
有人可以解释为什么数组有4个元素而不是2个吗?
拆分时还捕获定界符,因此有4个元素而不是2个。
从http://perldoc.perl.org/functions/split.html
如果PATTERN包含捕获组,那么对于每个分隔符,将为由组捕获的每个子字符串生成一个附加字段...