Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister

Re^2: wiki regex reprocessing replacement

by hippo (Bishop)
on Feb 15, 2020 at 16:59 UTC ( #11112992=note: print w/replies, xml ) Need Help??

in reply to Re: wiki regex reprocessing replacement
in thread wiki regex reprocessing replacement

Here's a non-recursive way which I think fits your criteria:

use strict; use warnings; use Test::More; my $wiki = '_/one *two*/ three_ null _/four *five*/ six_ null _/seven *eight +*/ nine_'; my $expected = '<u><i>one <b>two</b></i> three</u> null <u><i>four <b>five</b></i +> six</u> null <u><i>seven <b>eight</b></i> nine</u>'; my %h = ( '*' => 'b' , '/' => 'i' , '_' => 'u' , ); my $DBG = 1; sub flip { my $s = shift; my $z = $h{$s}; $h{$s} = $z =~ /\// ? substr ($z, 1, 1) : "/$z"; return "<$z>"; } sub tf { diag "Pre: '$_'\n\n" if $DBG; s{([_*/])}{flip($1)}eg }; $_ = $wiki; diag "IN <= '$wiki'\n\n" if $DBG; tf(); is ($_, $expected, " repeated replace works"); done_testing;

Replies are listed 'Best First'.
Re^3: wiki regex reprocessing replacement
by LanX (Sage) on Feb 15, 2020 at 17:12 UTC
    Many thanks, :)

    ... but ...

    The testsuite should have also included markup which must not be replaced

    My fault sorry, I thought it's obvious by the $pre and $post regex.

    The markup must come in pairs and be embraced by special word boundaries.

    (whitespace or other markup or tag-brackets or ... depending on pre/post)

    Hence a _ inside a word is forbidden, which makes sense for joined_identifiers .

    I've updated the tests in Re: wiki regex reprocessing replacement (UPDATED^2) with markup to ignore

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    Wikisyntax for the Monastery

      My fault sorry, I thought it's obvious by the $pre and $post regex.

      I noticed that they were of no use to the sample dataset so just applied Occam's Razor to them. Given the new(ly stated) criteria and the extra complications those entail I'm happy to wait for tybalt89's solution*.

      *which has appeared even as I was typing this. Top work!

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (7)
As of 2022-05-24 12:07 GMT
Find Nodes?
    Voting Booth?
    Do you prefer to work remotely?

    Results (82 votes). Check out past polls.