我想要的只是获取两个字符串之间的内容,如下一行:
$content = '81Lhello82R 81Lmy82R 81Lwife82R';
我希望在81L
和82R
之间获取所有内容,然后通过Preg_match自动将它们编码为Base64我想,我已经做了一些方法来做但没有做到得到预期的结果!
基本表格:
81Lhello82R 81Lmy82R 81Lwife82R
输出:
81LaGVsbG8=82R 81LbXk=82R 81Ld2lmZQ==82R
答案 0 :(得分:1)
硬规则:
$leftMask = '81L';
$rightMask = '82R';
$content = '81Lhello82R 81Lmy82R 81Lwife82R';
preg_match_all('#'.$leftMask.'(.*)'.$rightMask.'#U',$content, $out);
$output = [];
foreach($out[1] as $val){
$output[] = $leftMask.base64_encode($val).$rightMask;
}
$result = str_replace($out[0], $output, $content);
RegExp规则
$leftMask = '\d{2}L';
$rightMask = '\d{2}R';
$content = '81Lhello82R 81Lmy82R 81Lwife82R';
preg_match_all('#('.$leftMask.')(.*)('.$rightMask.')#U',$content, $out);;
$output = [];
foreach($out[2] as $key=>$val){
$output[] = $out[1][$key].base64_encode($val).$out[3][$key];
}
$result = str_replace($out[0], $output, $content);
答案 1 :(得分:0)
这是preg_replace_callback的工作:
$content = '81Lhello82R 81Lmy82R 81Lwife82R';
$output = preg_replace_callback(
'/(?<=\b\d\dL)(.+?)(?=\d\dR)/',
function($matches) {
return base64_encode($matches[1]); // encode the word and return it
},
$content);
echo $output,"\n";
其中
(?<=\b\d\dL)
是一个肯定的lookbehind,可确保我们在要编码的字词之前有2位数字和字母L (?=\d\dR)
是一个肯定的lookahead,可以确保我们有2个数字,并且在要编码的字后面有字母R (.+?)
是包含要编码的单词<强>输出:强>
81LaGVsbG8=82R 81LbXk=82R 81Ld2lmZQ==82R