quote: 'He said: "boo!"'
Can I capture matching string with ( ) and use it in the replace part of the regex with quote around ?
$1
>perl -le"$_='abc'; s/(.)/[$1]/sg; print"
[a][b][c]
| [reply] [d/l] [select] |
ahah you got me on that one.
I finally succeed:
use strict; use warnings;
use JSON;
my $response = '{Id:"343410466704454908",Pseudo:Stan,Country:"PERL_REP
+UBLIC",CountryId:1,CanRecieveImg:"true",Localization:"01",Localizatio
+nId:859,Picto:"fille.gif",PictoId:0,Type:0,Sex:1,Comment:"biz",Age:22
+,Media:0,IsAd:false}';
$response =~s/([{:,])(\w+)([:,}])/$1"$2"$3/g;
$response =~s/([{:,])(\w+)([:,}])/$1"$2"$3/g;
print $response;
output :
{"Id":"343410466704454908","Pseudo":"Stan","Country":"PERL_REPUBLIC","CountryId":"1",
"CanRecieveImg":"true","Localization":"01","LocalizationId":"859","Picto":"fille
.gif","PictoId":"0","Type":"0","Sex":"1","Comment":"biz","Age":"22","Media":"0",
"IsAd":"false"}
Still there two things I don't like :
The regex need to be called twice because unquoted words between : and , (eg Stan or 22) don't match, maybe because the : is alderly used for the rule words between , and :
$1 replaced all the pattern
ex : $response =~s/[{:,](\w+)[:,]/"$1"/g;
"Id""343410466704454908""Pseudo"Stan
So I used three capturing ( )
It's quit lame but it works.. If someone have something better... | [reply] [d/l] [select] |
$response =~s/([{:,])(\w+)(?=[:,}])/$1"$2"/g;
In 5.10+, you can even do
$response =~s/[{:,]\K(\w+)(?=[:,}])/"$1"/g;
| [reply] [d/l] [select] |
| [reply] |