Php 如何用特定字母替换特定数字(长度限制内)?
我尝试使用Php 如何用特定字母替换特定数字(长度限制内)?,php,regex,preg-replace,preg-replace-callback,Php,Regex,Preg Replace,Preg Replace Callback,我尝试使用preg\u replace将数字更改为字母,但仅将数字包装在“中,且子字符串中的字符数不超过7个 示例输入字符串: "3"sca"""co"1"str"0"ctor""r"3"t"0"r"1""locat"5"o"133""0"27""754a49b393c2a0"33"b97"332"cb7"3"c3c07"2""co"1"str"0"ctor""r"3"t"0" 期望的效果是每个符合条件的2变为d,每个符合条件的3变为e 以下是正确替换的示例: “3”变为e “23”变为de
preg\u replace
将数字更改为字母,但仅将数字包装在“
中,且子字符串中的字符数不超过7个
示例输入字符串:
"3"sca"""co"1"str"0"ctor""r"3"t"0"r"1""locat"5"o"133""0"27""754a49b393c2a0"33"b97"332"cb7"3"c3c07"2""co"1"str"0"ctor""r"3"t"0"
期望的效果是每个符合条件的2
变为d
,每个符合条件的3
变为e
以下是正确替换的示例:
变为“3”
e
变为“23”
de
变成“33”
ee
变为“32”
de
变成“333223”
eeede
$string = preg_replace("/\"322\"+/", "edd", $string);
$string = preg_replace("/\"233\"+/", "dee", $string);
$string = preg_replace("/\"32\"+/", "ed", $string);
$string = preg_replace("/\"23\"+/", "de", $string);
$string = preg_replace("/\"33\"+/", "e", $string);
$string = preg_replace("/\"333\"+/", "e", $string);
$string = preg_replace("/\"3\"+/", "e", $string);
$string = preg_replace("/\"3\"+/", "e", $string);
$string = preg_replace("/\"3\"+/", "e", $string);
$string = preg_replace("/\"3\"+/", "e", $string);
$string = preg_replace("/\"3\"+/", "e", $string);
如何使用一个preg\u replace调用进行所有符合条件的替换?要仅替换引号内的2和3,可以执行
preg\u replace\u回调()
来完成该操作
$before = '754a49b393c2a0"33"b97"332"cb7"3"c3c07"2"';
$after = preg_replace_callback(
'/"([^"]+)"/',
function ($matches) {
return str_replace( array( '2', '3' ), array( 'd', 'e' ), $matches[1] );;
},
$before
);
echo $after;
使用此正则表达式在1到7次的双引号之间查找
2
或3
(?首先是我建议的代码。然后是对本页所采用技术的回顾
代码:()
Stephane Janicaud和BA_Webimax的preg_replace_callback()
answers在执行过程中有好的组件,也有不好的组件,但总体逻辑是合理的。我将花点时间找出一些弱点/机会,并提供一些改进
关于模式:
斯蒂芬的模式:/(?'d','3'=>'e']);
您为什么要尝试替换组合,例如322?这太复杂了。我正在尝试第三方web抓取他们隐藏的获取字符串,如果我替换,我将在替换754a49b393c2a0“33”b97“332”cb7“3”c3c07“2”之前获取完整的获取值替换754A49B393C2A0EEB97EEDCB7EC3C07D后,域/get_id=754A49B393C2A0EEB97EEDCB7EC3C07D这似乎是一个有缺陷的系统。您只能使用10个字符。仅在“数字”中替换,且不超过7个character@Christian编辑以更好地匹配您正在执行的操作。如何在此替换函数中设置[2-9]{1,7}?
$text = '"3"sca"""co"1"str"0"ctor""r"3"t"0"r"1""locat"5"o"133""0"27""754a49b393c2a0"33"b97"332"cb7"3"c3c07"2""co"1"str"0"ct"233223322"or""r"3"t"0"';
$regex = '/(?<=\")[23]{1,7}(?=\")/';
$text = preg_replace_callback($regex,
function ($m) {
switch ($m[0]) {
case '2': return 'd';
case '3': return 'e';
// Add other cases here ...
}
},
$text
);
echo $text;
echo preg_replace_callback('/"([23]{1,7})"/',
function ($m) {
return str_replace(['2', '3'], ['d', 'e'], $m[1]);
},
$text
);