2012-05-14 114 views
0
$str = "234 567 some text following"; 

如何從字符串中的第三個字符到最後一個數字得到一個子字符串?PHP子串到字符串中的最後一個數字

編輯
我的問題似乎並不清楚從給出的答案。在上面的例子中,我希望返回子字符4 567,而不是從第三個字符到字符串結尾。謝謝。

2nd編輯
這只是一個示例字符串...字符串可能是文本和數字的混合。我需要從已知位置到最後出現的數字的位置進行子串處理。

+0

使用正則表達式 - http://php.net/manual/en/function.preg-match.php – ChrisW

+1

你這是什麼期望? '4 567'? – xdazz

+0

是的,4 567是我期望的 – Owen

回答

0

你應該使用SUBSTR功能

substr($str, 2); 

編輯:

用正則表達式

$pattern = '/^[0-9]+/'; 
preg_match($pattern, substr($str, 2), $matches, PREG_OFFSET_CAPTURE, 3); 
print_r($matches); 

EDIT2: 測試,它的工作

$pattern = '/^([0-9][ ]*)+/'; 
preg_match($pattern, substr($str, 2), $matches); 
print_r($matches); 

EDIT3: 沒看到你最後的編輯,建立一個新的^^

EDIT4:

$str = "234 567 some text 123 22 following 12 something"; 
$pattern = '/^([ ]*([0-9][ ]*)*([a-zA-Z][ ]*)*[0-9]*)*[0-9]/'; 
preg_match($pattern, substr($str, 2), $matches); 
echo $matches[0]; 

給我4 567 some text 123 22 following 12

是什麼找你期待?

編輯5:

新再次^^

'/^([0-9 :._\-]*[a-zA-Z]*[:._\-]*)*[0-9]/' 
+1

我不確定這是非常有用的 - 他想要最後一個**號**,而不是最後一個**字符** – ChrisW

+0

誤讀;)也許正則表達式在這種情況下? – jbduzan

+0

返回一個空數組。 – Owen

0

試試這個:

substr($str,2,strlen($str)); 

EDIT(新的答案):

此代碼的工作:

$str = preg_replace("/\D/", "", $str); 
echo substr($str,2); 
+0

如果你想要最後一個字符,不需要strlen。 – jbduzan

+0

是啊,沒錯,我只是認爲如果情況下問題還不清楚。ty –

+0

@jbduzan但他**並不希望它到最後一個字符!他希望它到最後**號** – ChrisW

0
<?php 
    $subStr = substr($str, 2); 
?> 

缺省情況下的長度(第三個參數)中,當離開了,將默認爲字符串的末尾。請注意,字符從0開始,所以第三個字符將位於位置2.

0

您可以在正則表達式中使用negative lookahead來完成此操作。

<?php 
    $lastNumber = getLastNumber("234 567 some text following"); 
    var_dump($lastNumber); 

    function getLastNumber($string) { 
     preg_match("/[0-9](?!.*[0-9])/", $string, $match); 
     if (!empty($match[0])) return $match[0]; 
     return false; 
    } 
?> 

編輯:對不起,我誤讀;以爲你想要最後一個獨立號碼。

雙編輯:這似乎是你想

<?php 
    $string = substr("234 567 some text 123 22 following", 2); 
    preg_match("/[0-9 ]+/", $string, $matches); 
    if (!empty($matches)) { 
     $number = intval(str_replace(" ", "", $matches[0])); 
     var_dump($number); 
    } 
?> 

什麼作爲它返回 「4567」。當然,你想留空間,只需使用$matches[0]而不是$number

0

我只是偶然發現了這一點,並認爲我會分享我的解決方案。

<?php 
$string = "234 567 some text following"; 
$start = 2; 
if(preg_match_all('/\d+/', $string, $sub)){ 
    $lastNumber = end($sub[0]); 
    $newString = substr($string,$start, strrpos($string, $lastNumber) + strlen($lastNumber) - $start); 
} 
echo $newString; 

此行獲取所有的數字串中

if(preg_match_all('/\d+/', $string, $sub)) 

在這裏,我們獲取的最後一個號碼

$lastNumber = end($sub[0]); 

隨後,我們發現數量最後一次出現,在使用strrpos最後一個數字出現超過一次。然後,使用該位置的子提取從起始位置到最後一個號碼:

$newString = substr($string,$start, strrpos($string, $lastNumber) 
      + strlen($lastNumber) - $start); 
相關問題