Regex 正则表达式替换&;与&;amp;
我有一个字符串,它有&像下面的一个Regex 正则表达式替换&;与&;amp;,regex,perl,Regex,Perl,我有一个字符串,它有&像下面的一个 "This R&M & Exapmle . It is very big & Complicated &146; example." 我想用替换&
"This R&M & Exapmle . It is very big & Complicated &146; example."
我想用替换&
但是当我使用$str=~s/&&/免疫球蛋白代码>提供以下输出
"This R&M & Company  . It is very big & CMM Level3 &146; Organization."
我期待着这次
"This R&M & Company . It is very big & CMM Level3 &146; Organization."
请帮助我,我不知道如何修复它。您可以使用负片:
&146对于和#146,代码>写得不正确代码>。如果您有更多此类错误,请在往返编码之前过滤/替换它们。我以前找到了一个更好的答案,并采用了发布的代码,将其置于摇篮中,使其成为我自己的,但我似乎在任何地方都找不到该帖子
不管怎样,这是我从中得出的解决方案
现在,编码器目前只支持
,&
、“
、
和>
,但是添加对更多HTML实体的支持非常容易
首先,这里是编码器:
var Encoder = {
encode: (function() {
var translate_re = /&(nbsp|amp|quot|lt|gt);/g,
translate = {
'nbsp': String.fromCharCode(160),
'amp' : '&',
'quot': '"',
'lt' : '<',
'gt' : '>'
},
translator = function($0, $1) {
return translate[$1];
};
return function(s) {
if(typeof s === 'string')
return s.replace(translate_re, translator);
else
return s;
};
})(),
decode: (function() {
var reg_str = '(<|>|"|&|' + String.fromCharCode(160) + ')';
var translate_re = new RegExp(reg_str, 'g');
var translate = {
'&' : '&',
'"': '"',
'<' : '<',
'>' : '>'
};
translate[String.fromCharCode(160)] = ' ';
var translator = function($0, $1) {
return translate[$1];
};
return function(s) {
if(typeof s === 'string')
return s.replace(translate_re, translator);
else
return s;
};
})()
};
使用HTML实体的:
解码HTML实体后:
更新regex以更改带有负前瞻性的符号和符号,以避免更改HTML实体
&(?!(#[0-9]{2,4}|[A-z]{2,6});)
两件事:1.你想用&
替换&
?和2.你应该接受一些答案。在大多数情况下,你已经得到了一个解决问题的答案。但我怀疑你更大的问题是你接收到的是不正确的输入。你从哪里获得的数据只是部分HTML编码的?当然,数据应该是编码或未编码。我建议与提供输入的任何人进行认真的交谈。可能使用cluebat:-)这将无法逃脱像C&a;这样的存储,但使用简单的regexp可能很难解决这一问题。您可能也希望避免数字字符引用s/&(?!\w+;|#d+|#x[\da-f]+)/&;/gi;
也许先以某种方式转义有效的符号,然后替换无效的符号会更容易。例如:s/&(amp|nbsp)/输入一些难以匹配的文本/g;
感谢Qtax的帮助。您能解释一下您在正则表达式中使用的!、#、;吗?或者请转发一些链接以在正则表达式中使用此类选项。
var Encoder = {
encode: (function() {
var translate_re = /&(nbsp|amp|quot|lt|gt);/g,
translate = {
'nbsp': String.fromCharCode(160),
'amp' : '&',
'quot': '"',
'lt' : '<',
'gt' : '>'
},
translator = function($0, $1) {
return translate[$1];
};
return function(s) {
if(typeof s === 'string')
return s.replace(translate_re, translator);
else
return s;
};
})(),
decode: (function() {
var reg_str = '(<|>|"|&|' + String.fromCharCode(160) + ')';
var translate_re = new RegExp(reg_str, 'g');
var translate = {
'&' : '&',
'"': '"',
'<' : '<',
'>' : '>'
};
translate[String.fromCharCode(160)] = ' ';
var translator = function($0, $1) {
return translate[$1];
};
return function(s) {
if(typeof s === 'string')
return s.replace(translate_re, translator);
else
return s;
};
})()
};
&(?!(#[0-9]{2,4}|[A-z]{2,6});)