删除字符串中不需要的字符

时间:2012-12-27 09:08:11

标签: php regex preg-replace

我想问一下如何从字符串中删除一个特殊字符(从废弃页面中提取)。

 4:30am

我只是想抽出时间,所以我试过这样过滤它:

$str = 'Â 4:30am';
$new_string = preg_replace("[^A-Za-z0-9]", "", $str); 
echo '<pre>'.$new_string.'</pre>';

但它没有改变:| 有没有解决方案/方法?

7 个答案:

答案 0 :(得分:7)

你的正则表达式无效......

$str = 'Â 4:30am';
$new_string = preg_replace("~[^a-z0-9:]~i", "", $str); 
echo '<pre>'.$new_string.'</pre>';

...你在正则表达式中忘记了“:”,所以在你的情况下它会被移除。

答案 1 :(得分:5)

你的正则表达式模式需要用分隔符包围。您当前的模式使用[]作为分隔符,这很可能不是您打算做的。

preg_replace("/[^A-Za-z0-9]/", "", $str); 

http://pl.php.net/manual/en/regexp.reference.delimiters.php

答案 2 :(得分:3)

使用$new_string = preg_replace("/[^A-Za-z0-9]/", "", $str);应该修复它。

preg_replace的第一个参数是模式,需要被/@包围。

在您的情况下,您使用的格式为[^A-Za-z0-9],其中[]被视为模式分隔符。因此匹配的实际模式变为^A-Za-z0-9,它与输入中的任何内容都不匹配。

答案 3 :(得分:3)

您可以使用filter_var

$str = 'Â 4:30am';
$str = filter_var($str,FILTER_SANITIZE_STRING,FILTER_FLAG_STRIP_HIGH);
echo $str ;

输出

4:30am

答案 4 :(得分:1)

获得时间:

$str = 'Â 4:30am';
$time = preg_match('/(?P<time>\d?\d:\d\d(?:am|pm))/', $str, $match);
var_dump($match);

答案 5 :(得分:1)

试试这个

$new_string = preg_replace("^[A-Za-z0-9]", "", $str); 

答案 6 :(得分:0)

$str = 'Â 4:30am';
$new_string = preg_replace("^\W", "", $str); 
echo '<pre>'.$new_string.'</pre>';