thanos1983 has asked for the wisdom of the Perl Monks concerning the following question:
Hello fellow Monks,
I am having a problem that I am trying to solve. I am not really good with regex and I am facing a case that I need to solve it only with regex.
I am having a string e.g. 'Thanos1983+|Thanos1983+' that I want to split in 3 pieces, group 1 'Thanos1983+', group 2 '|' and group 3 'Thanos1983+'.
This can be easily done with the following code:
#!/usr/bin/perl use strict; use warnings; use feature 'say'; my $test = 'Thanos1983+|Thanos1983'; say "I found:\t\$1: '$1'\t\$2: '$2'\t\$3: '$3'" if $test =~ /(^[\w+\+]+)(\|)([\w+\+]+$)/; __END__ $ perl test.pl I found: $1: 'Thanos1983+' $2: '|' $3: 'Thanos1983+'
The problem that I am having, in case that the string ends at the column e.g. 'Thanos1983+|' how can I detect the last group? What I would like to see is:
$ perl test.pl I found: $1: 'Thanos1983+' $2: '|' $3: ''
I tried with the following regex /(^[\w+\ +]+)(\|)([\w+\+ ]+$)/ but this only works only if string contains white space e.g. 'Thanos1983+| '.
Unfortunately I need to solve this using only regex, and the reason is that this regex is called from another script that I am not able to change and will only accept a regex.
Any suggestions are greatly appreciated.
Thanks in advance for everyone time and effort, BR.
|
|---|