php - 反转字符串而不影响php中的特殊字符
问题描述
我正在尝试在不受特殊字符影响的情况下反转字母表。我尝试了一些东西,但它似乎不起作用。有人知道我在这里做错了什么吗?
<?php
function Remove($val){
$r = strlen($val)-1;
$j = 0;
$pattern ='/[\'\/~`\!@#\$%\^&\*\(\)_\-\+=\{\}\[\]\|;:"\<\>,\.\?\\\]/';
while($j < $r){
if(preg_match($pattern,$val[$j])){
$j++;
}
else if(preg_match($pattern,$val[$r])){
$r--;
}else{
$j++;
$r--;
list($val[$j],$val[$r]) = array($val[$j],$val[$r]);
}
}
}
$val = "<brinh!>";
echo(Remove($val));
?>
想要的输出:<hnirb!>
解决方案
没有正则表达式的一种解决方案是:
function revert(string $input) : string {
// get all characters; asuming ascii
$chars = [];
for($i = 0; $i < strlen($input); $i++) {
if (ctype_alpha($input[$i])) {
$chars[] = $input[$i];
}
}
// replace characters
for($i = 0;$i < strlen($input); $i++) {
if (ctype_alpha($input[$i])) {
$input[$i] = array_pop($chars);
}
}
return $input;
}
$val = "<brinh!>";
echo revert($val);
有两个指针,一个从左到右,一个从右到左也是可能的。但可读性要差得多。