I've expanded the solution so it's a bit easier to read:
$string =~ s{ (?<![-\w./]) ( \s? [-\w.]* $item [-\w.]* \s? ) }{<b>$1<\/b>}gimsx;
Test output:
$ regex_slash_prob.pl <a href="/cgi-programming-with-perl.zip"><b>cgi-programming-with-perl. +zip</b></a>
Update:
While the solution above answers your question, consider the following.
If the HTML actually looks more like this:
my $string = qq| <a href="/cgi-programming-with-perl.zip"> cgi-programming-with-perl.zip </a> |;
Your output will look like:
<a href="/cgi-programming-with-perl.zip"> <b> cgi-programming-with-perl.zip </b> </a>
If you'd prefer it to look like:
<a href="/cgi-programming-with-perl.zip"> <b>cgi-programming-with-perl.zip</b> </a>
Remove both \s? lines, leaving:
$string =~ s{ (?<![-\w./]) ( [-\w.]* $item [-\w.]* ) }{<b>$1<\/b>}gimsx;
You had them in your original so I left them in thinking they perhaps served some other purpose in the real data you're working on (as the string you posted contained no whitespace at all).
-- Ken
In reply to Re: regex match word , don't match word preceeded by slash
by kcott
in thread regex match word , don't match word preceeded by slash
by lepetitalbert
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |