2011-12-21 60 views
1

我:使正則表達式到字符串的末尾?

$string='#229: Tomato Soup Menu'; 
preg_match_all('/: (.+?)*/', $string , $arr); 

我試圖使回報只是「番茄湯菜單」。這就是冒號空格之後的所有內容,直到字符串結尾。

任何想法?

回答

1

試試這個(它假定格式是在一開始總是一致的 - 一英鎊的象徵,那麼數字,然後一個冒號,然後是一個空格,然後將該文本你想):

$string='#229: Tomato Soup Menu'; 
$text = preg_replace('/^#[0-9]+: (.+)/', '$1', $string); 

如果是冒號,空格後只是一切,一開始是不相符的,試試這個:

$string='#229: Tomato Soup Menu'; 
$text = preg_replace('/^(.*?): (.+)/', '$2', $string); 
+1

讀者:檢查對方的答覆過於爲什麼使用+和不是+? – David19801 2011-12-21 12:16:16

+0

用於重新分解。 '/:(。*)/'如hakre的答案所示,很好,很短。 – Nope 2011-12-21 12:45:42

3

您正在使用非貪婪正則表達式:

(.+?)* 

這將嘗試儘可能少的匹配越好,這對於這個表情總是一無所獲。嘗試非貪婪等效代碼:

: (.+) 
2

sscanf­Docs正則表達式通常以GRA容易SP和功能,讓您的值直接賦值給一個變量:

$string='#229: Tomato Soup Menu'; 
$r = sscanf($string, "#%*d: %[^\n]", $return); 
echo $return; 

這將輸出Tomato Soup Menu,看到Demo

如果您更喜歡PCRE語法,則$字符與字符串的末尾(或多行模式中的行尾)匹配。

$string='#229: Tomato Soup Menu'; 
preg_match_all('/: (.*)$/', $string , $arr); 

.字符不會在標準模式下反正匹配行的結束,所以你更可以簡化您的模式:

$string='#229: Tomato Soup Menu'; 
preg_match_all('/: (.*)/', $string , $arr); 
相關問題