2012-03-14 43 views
0

您好我需要一個正則表達式,實際上可以得到所後插入任何字母「 - 」我有一個字符串,說正則表達式採摘值後「 - 」

"UpTown-R" , "Category-C" 

破折號如我得到的回報是什麼是「R」,「C」。

+0

如果短劃線之後總是有一個字母,這需要正則表達式。你可以使用'explode',並抓住每個元素的第一個字符。 – Josh 2012-03-14 13:51:35

回答

2

如果始終是字符串的最後一部分,你可以做到這一點

/[^-]+$/ 

看到它here on Regexr

[^-]是一個字符類匹配的一切,是不是一個破折號

+量詞意味着一個或多個前述元素

$錨字符串的結尾

2

簡單

-(.+)$ 

會得到一切,它是第一個破折號後;請注意,對於此字符串foo-bar-baz,您將匹配-bar-baz,並且bar-baz將處於第一組。

如果只匹配字母,

-([A-Za-z]+)$ 

就足夠了。您的結果將在$1組中。

另外,你爲什麼不substr你的字符串,從最後一個短劃線索引到字符串結束?

+1

它會得到從**第一次**破折號到結束的所有內容,包括破折號[Regexr](http://regexr.com?30apf) – stema 2012-03-14 13:40:14

+0

從結尾開始,我的意思是破折號(如果有的話)將在該組中。我會更新答案。 – 2012-03-14 14:28:51

1

試試這個正則表達式;

/^.*\-(.*)$/ 

這樣,你的儀表板

3

如何獲得後一切:

preg_match('/-([a-z])\b/i', $string, $match); 

的Unicode兼容性:

preg_match('/-(\pL)\b/u', $string, $match); 

你想要的字母是$match[1]

1

爲什麼要使用正則表達式慢的這一點,爲什麼不只是爆炸的字符串:

使用測試?

$str = 'UpTown-R'; 
$arr = explode('-',$str); 
$letter = $arr[1]; 
$letterSage = $arr[1][0]; // to be sure you only get 1 character. 

這也適用!在編寫正則表達式之前,請考慮這些明智的詞語:「如果您的解決方案包含超過3個正則表達式,那麼您就是問題的一部分」