$string='#229: Tomato Soup Menu';
preg_match_all('/: (.+?)*/', $string , $arr);
我試圖使回報只是「番茄湯菜單」。這就是冒號空格之後的所有內容,直到字符串結尾。
任何想法?
$string='#229: Tomato Soup Menu';
preg_match_all('/: (.+?)*/', $string , $arr);
我試圖使回報只是「番茄湯菜單」。這就是冒號空格之後的所有內容,直到字符串結尾。
任何想法?
試試這個(它假定格式是在一開始總是一致的 - 一英鎊的象徵,那麼數字,然後一個冒號,然後是一個空格,然後將該文本你想):
$string='#229: Tomato Soup Menu';
$text = preg_replace('/^#[0-9]+: (.+)/', '$1', $string);
如果是冒號,空格後只是一切,一開始是不相符的,試試這個:
$string='#229: Tomato Soup Menu';
$text = preg_replace('/^(.*?): (.+)/', '$2', $string);
您正在使用非貪婪正則表達式:
(.+?)*
這將嘗試儘可能少的匹配越好,這對於這個表情總是一無所獲。嘗試非貪婪等效代碼:
: (.+)
的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);
讀者:檢查對方的答覆過於爲什麼使用+和不是+? – David19801 2011-12-21 12:16:16
用於重新分解。 '/:(。*)/'如hakre的答案所示,很好,很短。 – Nope 2011-12-21 12:45:42