Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical
 
PerlMonks  

Re^2: Regular Expression Doubt

by reasonablekeith (Deacon)
on Apr 05, 2005 at 13:45 UTC ( [id://444981]=note: print w/replies, xml ) Need Help??


in reply to Re: Regular Expression Doubt
in thread Regular Expression Doubt

You seem to be arbitrarily splitting on spaces. This will break unless there's a clear space either side of the +. A better option would be as follows.
my $text = '1&plus;2<maths> &plus; dfdf</maths>'; my $output = ""; while ($text =~ m/((<maths>.*?<\/maths>)|([^<]*))/gs) { if ($2) { $output .= $2; } else { my $segment = $3; $segment =~ s/&plus;/&thinsp;&plus;&thinsp;/g; $output .= $segment; } } print $output . "\n";
The basic premise being to scoop up and ignore (push onto output) anything in <maths>, or scope up as much that can easily be determined not to be in <maths> (ie no angle brackets) and parse that before putting it on the output.

Replies are listed 'Best First'.
Re^3: Regular Expression Doubt
by Anonymous Monk on Apr 05, 2005 at 14:31 UTC
    my $text = '1 &plus; 2 <br> <maths> &plus; dfdf</maths>'; my $output = ""; while ($text =~ m/((<maths>.*?<\/maths>)|([^<]*))/gs) { if ($2) { $output .= $2; } else { my $segment = $3; $segment =~ s/&plus;/&thinsp;&plus;&thinsp;/g; $output .= $segment; } } print $output . "\n"; __END__ 1 &thinsp;&plus;&thinsp; 2 br> <maths> &plus; dfdf</maths>
    You lost a < here.
      dammit
      my $output = ""; while ($text =~ m/((<maths>.*?<\/maths>)|&plus;|.)/gs) { if ($2) { $output .= $1; } else { my $segment = $1; $segment =~ s/&plus;/&thinsp;&plus;&thinsp;/g; $output .= $segment; } } print $output . "\n";
        Eh, if you go that way, it could be made much more efficient. No need for the s/// - you're matching any &plus; already:
        my $output = ""; while ($text =~ m{\G(?:&plus;|(<maths>.*?<\/maths>|[^&<]+|.))}gs) { $output .= $1 || "&thinsp;&plus;&thinsp;"; } print $output, "\n";
Re^3: Regular Expression Doubt
by sh1tn (Priest) on Apr 05, 2005 at 15:46 UTC
    # in rare cases with no spaces: ... $text =~ s/(?!\s)(<maths>)/ $1/g; ...


Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://444981]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others contemplating the Monastery: (4)
As of 2024-04-24 18:21 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found