2011-12-21 22 views
1

我有串,其包括一個標籤,下劃線和ID:什麼是分隔字符串的數字和非數字部分的最有效方法?

  • 「category_4」
  • 「office_362」
  • 「core_market_56」

我會喜歡有兩個不同的塊:

  • array(「category」,4)
  • 陣列(「辦公室」,362)
  • 陣列(「core_market」,56)

我知道我可以隔離數值,然後轉身並減去從原始字符串,但我我不確定是否有一個更清晰的方法可以一步到位。爆炸的limit論點似乎很接近,我有一種感覺,有一個正則表達式模式,可能只拆分最後一個下劃線。

回答

2

這是正則表達式你想

(\w*)_(\d*) 

第一個匹配的組是你的話,第二個 - 號。當然,這是基於數字總是在最後並且通過下劃線與單詞分開的假設。

+0

感謝您的回答和解釋,我很感激! –

+0

我的榮幸:-) –

0

我想最有效的方式爲解析目的是在年底有一個固定長度數字字段,這樣就可以隨時從字符串末尾數字符一個確切的數字,知道休息(減去分隔符)將成爲文本界面。

# Example with fixed length numeric portion of 8 digits 
$N = 8; 
$s = "SomeText_00000001"; 
$text = substr($s, 0, strlen($s) - $N - 1); 
$num = substr($s, -$N); 
+0

感謝您回答技術高效部分。不幸的是,我無法確定身份證的長度,但這個問題也不明確。 –

2
$strings = array("category_4","office_362","core_market_56"); 
foreach($strings as &$string) 
{ 
    preg_match('/(\w*)_(\d*)/', $string, $matches); 
    $string = array($matches[1],$matches[2]); 
} 
print_r($strings); 

以上將返回

([0] => Array (
      [0] => category 
      [1] => 4) 
[1] => Array (
      [0] => office 
      [1] => 362) 
[2] => Array (
      [0] => core_market 
      [1] => 56)) 
相關問題