首页 > 解决方案 > 反转字符串而不影响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!>

标签: php

解决方案


没有正则表达式的一种解决方案是:

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);

有两个指针,一个从左到右,一个从右到左也是可能的。但可读性要差得多。


推荐阅读