overlapping find and replace

Chris Jack chris_jack at msn.com
Tue Oct 19 13:41:09 BST 2010

On 18 Oct 2010, at 16:11, Michael Lush wrote:
> I have a string ABCDEFGH and want to highlight two overlapping hits
> BCDE and DEFG in HTML to make A<b>BC<i>DE</b>FG</i>H
> The obvious $string =~ s{(BCDE|DEFG)}{<b>$1</b>}g; does not work as the 
> modified string doesn't match the second query and I don't get differnet
> fonts for each overlapping match.
> Is there a conventional way of doing this?

It really depends on what your general case is. For your specific case, you could consider the fairly simple:

$string =~ s{(BC)(DE)(FG)}{$1<b>$2</b>$3}g;
For a more general case: I would suggest you pre-parse the LHS of the RE to achieve something similar.

More information about the london.pm mailing list