簡體   English   中英

什么是這個perl正則表達式的PHP等價物

[英]What is the PHP equivalent of this perl regular expression

如何使用PHP編寫這個perl代碼?

$var =~ tr/[A-Za-z,.]/[\000-\077]/;

編輯007應該是077

php有strtr函數,它使用數組鍵=>值對,其中字符串中鍵的實例被替換為value。 除此之外,就像@Rocket所說,你可以使用preg_replace_callback來獲取你的替換值。 匹配的字符被傳遞給函數,並被函數返回的任何內容替換。

您可以使用preg_replace_callback Perl

my $var = 'ABCDEFGHIJKLMNOPQRSTUVWXWZabcdefghijklmnopqrstuvwxyz1234567890,.';
$var =~ tr/[A-Za-z,.]/[\000-\077]/;
print unpack("H*", $var), "\n";

PERL現場演示

PHP

$string = 'ABCDEFGHIJKLMNOPQRSTUVWXWZabcdefghijklmnopqrstuvwxyz1234567890,.';
$replace = preg_replace_callback("/[A-Za-z,.]/", function ($m) {
    $n = 0;
    if (ctype_punct($m[0])) {
        $m[0] == "," and $n = - 8;
        $m[0] == "." and $n = - 7;
    } else {
        $n = ctype_upper($m[0]) ? 65 : 71;
    }
    return chr(ord($m[0]) - $n);
}, $string);
print(bin2hex($replace));

PHP現場演示

兩個輸出

000102030405060708090a0b0c0d0e0f101112131415161716191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233313233343536373839303435

有人說PHP沒有的等效tr/// (雖然我現在看到它作為strtr )。 如果是這樣的話,

$var =~ tr/A-Za-z,./\000-\077/;

可以寫成如下替換:

my %encode_map;
my $i = 0;
$encode_map{$_} = chr($i++) for 'A'..'Z', 'a'..'z', ',', '.';

$var =~ s/([A-Za-z,.])/$encode_map{$1}/g;

這應該更容易轉換為PHP,但遺憾的是我不知道PHP。

(我假設tr///中的[]不應該在那里。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM