用正则表达式替换字符串

时间:2013-01-22 08:45:20

标签: php regex

我正在尝试从这样的字符串中提取:

$message = #porrabarça per avui @RTorq el  @FCBar guanyarà per 3-1 al AC Milan

'3-1'。作为数字 - 数字

我试过

$message = preg_replace('/[0-9]\s*-\s[0-9]/i', '', $message);

但它不起作用。它的输出与输入相同。

你可以帮帮我吗?

2 个答案:

答案 0 :(得分:6)

这里的问题是\s

/[0-9]\s*-\s[0-9]/
           ^
           |
           +--- This makes a single space mandatory. 

你需要\s*。使用preg_match提取任何内容。 preg_match匹配并可选地将匹配设置为变量。从那里你可以提取比赛。 preg_replace替换匹配的内容。

preg_match("/\d+\s*-\s*\d+/", $message, $match);
$num = $match[0];

http://ideone.com/BWKZQV

要替换使用此模式并将空字符串替换为preg_replace中的替换字符串。

更好的模式将使用POSIX字符类。它匹配任何其他语言环境的任何类型的数字字符。

/[[:digit:]]+[[:space:]]*-[[:space:]]*[[:digit:]]+/

答案 1 :(得分:1)

如果要替换字符串:

<?php  
$message="#porrabarça per avui @RTorq el  @FCBar guanyarà per 3-1 al AC Milan";

echo $message = preg_replace('/[0-9]+-[0-9]+/', '', $message);

?>

如果您想获得匹配的群组:

<?php  
$message="#porrabarça per avui @RTorq el  @FCBar guanyarà per 3-1 al AC Milan";

preg_match_all('/[0-9]+-[0-9]+/', $message, $matches);

print_r($matches);

?>