我使用split功能在白色空间上分割一个字符串,由于某种原因,分裂是保持数组中的空格我保存它。这是代码
while (<FP>) {
if (/$END_SECTION/) { last; }
if (/^\s*$/) { next; }
chomp;
( $name, $value ) = split m/:/, $_;
print __LINE__, "name: $name Value: $value\n" if $debug;
if ( $name =~ /Diameter/ ) { #if Diameter is found
print __LINE__, "Diameter: $value\n" if $debug;
@fields = split /\s/, $value;
print __LINE__, " Fields:@fields\n" if $debug;
my $wafer_size = $fields[1]; #save index [0] to wafer_size
print __LINE__, "Diameter: $wafer_size\n" if $debug;
if ( $wafer_size =~ /8/ ) {
$p->{Diameter} = "200";
} elsif ( $wafer_size =~ /6/ ) {
$p->{Diameter} = "150";
}
print __LINE__, "Diameter: $p->{Diameter}\n" if $debug;
}
}
我分裂的文字是:
Wafer Diameter: 8 IN
Flat Location (T,B,L,R): L
Die X Step: 31800 UM
Die Y Step: 25795 UM
当代码找到/Diameter/
时,会保存@fields
数组中的空格。知道为什么会这样吗?
答案 0 :(得分:3)
split
:
行 8 IN
后,您$value
获得/.../
。注意领先的空间。
然后你得到了预期的行为。当使用正则表达式/\s/
时,字符串将按给定模式正确分割并返回所有子字符串,但仅删除尾随空格除外。有一些细节和特殊情况,请参阅split。
一个值得注意的例子是带有前导空格的字符串,其中/\s+/
我们将空字符串作为返回列表中的第一个元素。即使使用' '
,我们也会将空字符串作为第一个元素,因为它位于与模式匹配的空白之前。
在您的示例中,似乎有一个前导空格,因此返回一个空字符串。我把它带到了#array; 空格......阵列&#34;你的意思是有数组元素&#34;什么都没有。&#34;那些是空的字符串,应该没有空格。
这可以通过使用模式' '
来更改,指定任何数量的空白
...当省略PATTERN或由单个空格字符组成的字符串(例如
"\x20"
或/ /
,但不是/\s+/
)时。在这种情况下,EXPR中的任何前导空格都会在拆分发生之前被删除,而PATTERN则被视为/ /
;特别是,这意味着任何连续的空格(不只是单个空格字符)都用作分隔符。但是,通过指定模式" "
而不是字符串my @fields = split ' ', $value;
可以避免这种特殊处理,从而只允许单个空格字符作为分隔符。在早期的Perls中......
因此,如果您不在乎多个空间,请使用
/\s+/
请记住,对于近似等效的' '
,您必须注意领先的空间。
请注意,使用单个空间(或标签页)时,可能会出现意外情况。例如,可以很容易地隐藏&#39;选项卡,当文本和空格碰巧有一个标签的长度,所以我们没有注意到任何额外的空间,因为它都在标签上对齐。
如果没有使用多个空格,使用// Get the elements
var owl_1 = $('.carousel01');
var owl_2 = $('.carousel02');
var owl_3 = $('.carousel03');
// Apply OWL Carousel
owl_1.owlCarousel({
items: 1,
loop: true,
autoplay: true,
autoplayTimeout: 5000,
smartSpeed: 300,
animateOut: 'fadeOut',
animateIn: 'fadeIn',
nav: false,
dots: false
});
owl_2.owlCarousel({
items: 1,
loop: true,
autoplay: true,
autoplayTimeout: 5000,
smartSpeed: 300,
animateOut: 'fadeOut',
animateIn: 'fadeIn',
nav: false,
dots: false
});
owl_3.owlCarousel({
items: 1,
loop: true,
autoplay: true,
autoplayTimeout: 5000,
smartSpeed: 300,
animateOut: 'fadeOut',
animateIn: 'fadeIn',
nav: false,
dots: false
});
// STOP AUTOPLAY (without this it wont work, oddly...)
owl_1.trigger('stop.owl.autoplay');
owl_2.trigger('stop.owl.autoplay');
owl_3.trigger('stop.owl.autoplay');
// START AUTOPLAY SEQUENCIALLY
setTimeout(function(){
owl_1.trigger('play.owl.autoplay', [10]) // <-- 10 is the delay of scroll
}, 1000);
setTimeout(function(){
owl_2.trigger('play.owl.autoplay', [10]) // <-- 10 is the delay of scroll
}, 1500);
setTimeout(function(){
owl_3.trigger('play.owl.autoplay', [10]) // <-- 10 is the delay of scroll
}, 2000);
会更安全。