lplo has asked for the wisdom of the Perl Monks concerning the following question:
I am trying to find an efficient way to match words that can contain digits at any point, but not pure numbers. In a simple example I can do this as follows:
The output is " 87", as desired.#!/usr/bin/perl use strict; use warnings; my $string = "foo 1foo foo2 3foo4 foo5bar 87"; $string =~ s/\d*[a-z]\d*//g; print "$string\n";
The problem just gets ugly quickly, as I like to allow words to contain minus signs, underscores, umlauts, and so on. A more complex example would be:
which results in " ; () 87 - _ !@#$%".#!/usr/bin/perl use strict; use warnings; my $string = 'foo 1foo; foo_2 foo-bar() 87 - _ !@#$% '; my $optional = qr/[\d_-]/; my $mandatory = qr/[a-zA-Z]/; $string =~ s/$optional*$mandatory$optional*//g; print "$string\n";
I am asking more generally:
Is there a way to a create a regular expression character class that has some mandatory and optional members? What would be your way to match (not necessarily replace) these "words"?
Further down the road the actual task is to find the position of the next "word".
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Regex matching words with numbers, but not numbers.
by Athanasius (Archbishop) on Jul 26, 2014 at 07:07 UTC | |
|
Re: Regex matching words with numbers, but not numbers.
by Anonymous Monk on Jul 26, 2014 at 08:06 UTC | |
|
Re: Regex matching words with numbers, but not numbers.
by AppleFritter (Vicar) on Jul 26, 2014 at 09:22 UTC | |
|
Re: Regex matching words with numbers, but not numbers.
by Anonymous Monk on Jul 26, 2014 at 06:50 UTC | |
|
Re: Regex matching words with numbers, but not numbers.
by AnomalousMonk (Archbishop) on Jul 27, 2014 at 00:25 UTC | |
by Anonymous Monk on Jul 27, 2014 at 03:34 UTC |