1
給定一個字符串,我需要在正斜槓上拆分字符串,但前提是斜槓不出現在{}塊中。使用正則表達式拆分,負面看後面和前面跳到塊內
我知道這可以通過各種其他方式完成。在這一點上,我只想看看這是否可能以及正則表達式的樣子。如果它功能強大,它可能會加快程序的速度。贏得勝利。 :)
在以下示例中使用perl,儘管它最終可能會以其他語言實現。
實際上,這就是我想做的事:
#!/bin/perl -w
use strict;
use Data::Dumper;
my @strings = (
"/this/that",
"/this/",
"/this/{ID=/foo\/bar/}",
"/this/{ID=foo/bar}",
"/this/{/}",
"/this/{ID=/foobar/}/that/foo/",
"/this/{ID=f/o/o/b/a/r/}",
"/this/{ID=/foobar/}/that/{bar}/that"
);
foreach my $string (@strings) {
print $string."\n";
my @items = split(/(?<!{.*?)\/(?!.*?})/,$string);
print Dumper(\@items);
}
的問題是,你不能使用可變長度向後看。
所以,我一直在玩只用前瞻來完成同樣的事情。
最近我已經能夠使用這條線分割來:
my @items = split(/\/(?![^{].*?}|})/,$string);
,幾乎得到它,但{}塊之前不會分裂開/。所以,我結束了這樣的結果:
$VAR1 = [
'/this',
'{ID=/foobar/}/that',
'{bar}',
'that'
];
它應該是:提前
$VAR1 = [
'this',
'{ID=/foobar/}',
'that',
'{bar}',
'that'
];
感謝。
你不需要逃避尾隨......但是是的。非常好。 我很接近...討厭被關閉,不得不問問:) 謝謝 – mbond
@mbond如果他們不在字符類中,我通常會轉義元字符,所以正則表達式更加便攜,對不起^^ ;.別客氣! – Jerry