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代码>应该适用于您的示例