Works as long as }} is immediately followed by a \newline! ¹
Is there a reason why you've put the \K within the group?
I suppose this does the same and is better readable!
$data =~ s<(?:{{.*?}})?\K\n>{<br>\n}gs;
print $data;
1) see or clause in Re: Replace newlines only if not inside braces for a work around | [reply] [d/l] [select] |
No, there is no difference. I just thought it would be a little bit more efficient. I thought that, if the \K is outside, the $& variable is being cleaned up for every substitution, which is not really necessary. It should be cleaned only when something on the left side has been matched. Anyway, it is more readable in your way, and does, basically, the same thing. :)
Alternatively, to work with strings that contain {{...}} groups, which are not followed by a newline, this code should do it:
$data =~ s<(?:{{.*?}}|[^\n])*\K\n>{<br>\n}gs;
print $data;
| [reply] [d/l] [select] |
| [reply] [d/l] |
Did that s/// win an obfuscation contest somewhere?
use warnings;
use strict;
use 5.012;
my $data = <<'END_OF_TEXT';
foo
bar
{{
alpha
beta
}}
baz
END_OF_TEXT
$data =~ s/
(?: #Non-capturing group
{{.*?}} #Text enclosed by double braces
\K #Exclude what's to the left of \K from match
)? #Match whole group 0 or 1 time
\n
/\n<br>/gxms;
say $data;
--output:--
foo
<br>bar
<br>{{
alpha
beta
}}
<br>baz
<br>
It would make more sense to put the newlines after the breaks if you were trying to pretty print some html.
| [reply] [d/l] |
Did that s/// win an obfuscation contest somewhere?
so what's your contribution?
It would make more sense to put the newlines after the breaks if you were trying to pretty print some html.
minor problems of minor minds...
| [reply] |