önemsiz filtrelemek için düzenli ifade php

3 Cevap php

Yani ilginç bir sorun var: Ben bir dize var, ve çoğunlukla ben ne olacağını biliyorum:

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

Ancak bu durumda, 's üst harf veya sayı vardır. Sorun dize karışık çöp olan şudur: dize 5 veya 6 adet bölünmüştür, ve aradaki önemsiz bir sürü var olduğunu: basılamaz karakterler, yabancı karakterler, yanı sıra düz eski normal karakterler. EMY × nüqÏ; Nyþ = MI: Bu gibi bakmak apt bulunuyor kısa şeylere

Ben sadece PHP son 8 karakter kapmak ve iyi için umut var şu anda yüzden genellikle son 8 karakter ('s), sağ ucunda birlikteyiz. Bazen, bu işe yaramazsa, bu yüzden daha sağlam bir çözüm gerekir.

The problem is technically unsolvable, but I think the best solution is to grab characters from the end of the string while they are upper case or numeric. If I get 8 or more, assume that is correct. Otherwise, find the st= and grab characters going forward as many as I need to fill up the 8 character quota. Is there a regex way to do this or will i need to roll up my sleeves and go nested-loop style?

update:

Bazı karışıklığı temizlemek için, ben bu gibi bir giriş dizesi olsun:

[garbage]http:/[garbage]/somewe[garbage]bsite.co[garbage]m/something=[garbage]????????

çöp (ucu dışında çöp asla) dizesinde öngörülemeyen yerlerde olduğunu ve öngörülemeyen uzunluğa sahiptir dışında (en azından ben ne desenleri bulmak mümkün olmuştur). ? Genellikle s dolayısıyla bana sadece son 8 karakter kapma hep birlikte vardır, ama bazen bazı eksik verilerin hangi sonuçları değildir ve çöp geri döndü: - \

3 Cevap

$var = '†http://þ=www.ex;üßample-website.î;ëcomÝ×ü/joy_hÏere.html'; // test case


$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(':','.','/','-','_')
                    ))
                )
            );
        }
    )
);

Hah, bu bir şakaydı. İşte sizin için bir regex bulunuyor:

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

Belirtildiği gibi, bu sorun çözümsüz olduğunu. Çöp "düz eski normal bir karakter" karakter içerebilir ve çöp dizenin sonunda düşebilir, o zaman bu örnek hedef dize "ABCDEFGH" veya "BCDEFGHI" olup olmadığını bilemezsiniz:

__http:/____/somewe___bsite.co____m/something=__ABCDEFGHI__

Bu değerler neyi temsil eder? Belki sen kullanarak hex-kodlamak gerekir, sadece veritabanında çöp ile uğraşmak zorunda kalmadan, hepsini korumak istiyorsanız bin2hex().