Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using the Perl split function, but keeping certain delimiters

Tags:

regex

split

perl

I have a string that I need to split on a certain character. However, I only need to split the string on one of those characters when it is flanked by digits. That same character exists in other places in the string, but would be flanked by a letter -- at least on one side. I have tried to use the split function as follows (using "x" as the character in question):

my @array = split /\dx\d/, $string;

This function, however, removes the "x" and flanking digits. I would like to retain the digits if possible. Any ideas?

like image 652
indiguy Avatar asked Dec 10 '22 15:12

indiguy


2 Answers

Use zero-width assertions:

my @array = split /(?<=\d)x(?=\d)/, $string;

This will match an x that is preceded and followed by a digit, but doesn't consume the digits themselves.

like image 103
Marcelo Cantos Avatar answered May 20 '23 14:05

Marcelo Cantos


You could first replace the character you want to split on with something unique, and then split on that unique thing, something like this:

$string =~ s/(\d)x(\d)/\1foobar\2/g;
my @array = split /foobar/, $string;
like image 27
Brian Avatar answered May 20 '23 15:05

Brian