php正则表达式来过滤掉垃圾

Mal*_*ala 0 php regex filtering garbage

所以我有一个有趣的问题:我有一个字符串,在大多数情况下我知道会发生什么:

http://www.someurl.com/st= ????????

除了在这种情况下,?是大写字母或数字.问题是,字符串有垃圾混合:字符串分为5或6块,中间有很多垃圾:不可打印的字符,外来字符,以及普通的旧普通字符.简而言之,看起来像这样的东西:Nyþ=mî;ëMÝ×nüqÏ

通常最后8个字符(?的)最后都在一起,所以目前我只有PHP抓住最后8个字符并希望最好.偶尔,这不起作用,所以我需要一个更强大的解决方案.

问题在技术上是无法解决的,但我认为最好的解决方案是从字符串末尾抓取字符,而它们是大写或数字.如果我得到8或更多,假设是正确的.否则,找到st =并抓取前进的字符,尽可能多地填写8个字符的配额.有没有正则表达式的方法来做这个或我需要卷起我的袖子,并采取嵌套循环风格?

更新:

为了消除一些困惑,我得到一个输入字符串,如下所示:

[garbage]http:/[garbage]/somewe[garbage]bsite.co[garbage]m/something=[garbage]????????
Run Code Online (Sandbox Code Playgroud)

除了垃圾是在字符串中不可预测的位置(除了结尾永远不是垃圾),并且具有不可预测的长度(至少,我已经能够找到两者中的模式).通常这些都是?因此我只抓住最后8个字符,但有时它们不会导致一些丢失的数据并返回垃圾: - \

Der*_*sed 6

$var = '†http://þ=www.ex;üßample-website.î;ëcomÝ×ü/joy_hÏere.html'; // test case
Run Code Online (Sandbox Code Playgroud)
$clean = join(
    array_filter(
        str_split($var, 1),
        function ($char) {
            return (
                array_key_exists(
                    $char,
                    array_flip(array_merge(
                        range('A','Z'),
                        range('a','z'),
                        range((string)'0',(string)'9'),
                        array(':','.','/','-','_')
                    ))
                )
            );
        }
    )
);
Run Code Online (Sandbox Code Playgroud)

哈,那是个玩笑.这是你的正则表达式:

$clean = preg_replace('/[^A-Za-z0-9:.\/_-]/','',$var);
Run Code Online (Sandbox Code Playgroud)