2015-05-21 67 views
1

嗨我想在php中使用preg_replace刪除一個字符,所以我有這裏的代碼,我想除去最後一個數字(s)除去整個字符,字母和數字,其中有破折號( - )符號後跟數字,所以這裏是我的代碼。刪除除了最後一個變量以外的所有字符和數字Dash符號

echo preg_replace('/(.+)(?=-[0-9])|(.+)/','','asdf1245-10');

我希望得到的結果將是

-10

問題上面不工作得非常好。我使用http://www.regextester.com/來檢查圖案,它看起來像是有效,但另一方面http://www.phpliveregex.com/完全不起作用。我不知道爲什麼,但任何人都可以幫助找出答案。

非常感謝

回答

2

這裏有很長的路要走:

echo preg_replace('/^.+?(-[0-9]+)?$/','$1','asdf1245-10'); 

輸出:

-10 

echo preg_replace('/^.+?(-[0-9]+)?$/','$1','asdf124510'); 

輸出:

<nothing> 
+0

謝謝,這解釋了很多。 – leojarina

+1

$ 1是什麼意思? – leojarina

+1

@ user1256346:'$ 1'代表組1的內容,這是第一對括號內的內容。 – Toto

0

我的第一個想法是使用在這種情況下..使簡單如下面的代碼爆炸

$string = 'asdf1245-10'; 
$array = explode('-', $string); 
end($array); 
$key = key($array); 
$result = '-' . $array[$key]; 

$ result =>'-10';

+0

那是另一種方式,但是太多的線路。 –

0

的另一種方式:

$result = preg_match('~\A.*\K-\d+\z~', $str, $m) ? $m[0] : ''; 

圖案的詳細資料:

\A  # start of the string anchor 
.*  # zero or more characters 
\K  # discard all on the left from match result 
-\d+ # the dash and the digits 
\z  # end of the string anchor 
0
echo preg_replace('/(\w+)(-\w+)/','$2', 'asdf1245-10'); 
相關問題