2012-12-24 79 views
0

我有一個數字字符串,我需要將它分成兩組,從右側開始,但不超過三個組。php preg分割一個字符串

要理解,這三組是「銅」,「銀」和「黃金」,起始價值是合成金額。例如:

10 - > 10銅

1010 - > 10銀和10銅

102030 - > 10金,20銀和30銅

1234567891010 - > 123456789金,10銀和10銅

如何在PHP中做到這一點?

+0

100是否銅= 1銀100銀= 1個金? – Michael

+0

preg_split($ pattern,$ subject)但是我不知道要寫什麼模式...... :( –

+0

正如@Michael所說的我會用數學而不是正則表達式,把它全部保存在銅中,然後將它轉換成黃金,銀和銅 –

回答

5

我只是將字符串轉換爲int類似here然後做一些算術操作。

設X是數量

r1 = x % 10000; 
gold = x/10000; 
copper = r1 % 100; 
silver = r1/100; 

所以你把所有的信息。

%裝置modulo

+0

哦,是的,這是比拆分字符串要簡單得多! 我沒有得到這個%的東西,但我已經用floor()來截斷十進制值 謝謝 –

+0

%意味着模數,所以對於例如5%2是3,所以如果您將5分爲2,則其餘的爲3。另一個示例是:1002%10爲2,因此1002 = 100 * 10 + 2 –

+0

@the_nutria以下是文檔:http:// php .net/manual/zh/language.operators.arithmetic.php – Jelmer

0

Regex的溶液:

$tests = array("10", "2010", "302010", "3030302010"); 
foreach($tests as $test) { 
    preg_match('@^(?:(\d*)(\d\d))?(\d\d)[email protected]', $test, $match); 
    $copper = array_pop($match); 
    $silver = array_pop($match); 
    $gold = array_pop($match); 
    echo sprintf("%10s %10s %10s %10s\n", $test, $gold, $silver, $copper); 
} 
//   10        10 
//  2010     20   10 
//  302010   30   20   10 
// 3030302010  303030   20   10 
+0

那是什麼「非正則表達式」? –

+0

@maček:修改答案(再次) –

0

使用正則表達式:

$items = array('12', '1234', '123456', '1234567891234'); 

foreach ($items as $item) 
{ 
    echo $item; 

    preg_match('/^(?:(?<gold>\d*)(?<silver>\d\d))?(?<copper>\d\d)$/', $item, $result); 

    foreach ($result as $key => $value) 
    { 
     if (is_int($key)) 
     { 
      unset($result[$key]); 
     } 
    } 
    var_dump($result); 
}