帮助正则表达式 - 提取文本

时间:2010-06-17 18:31:00

标签: php regex

我有3个单独的字符串:

$d = 'Created on November 25, 2009';
$v = 'Viewed 17,603 times';
$h = '1,200 hits';

需要转换为:

$d1 = {unix时间戳为2009年11月25日};

$v1 = "17603";(如果存在则删除逗号)

$h1 = "1200";(如果存在则删除逗号)

最有效的方法是什么(可能使用正则表达式)?任何代码片段都会很棒。

3 个答案:

答案 0 :(得分:0)

第一个:

$d_stripped = str_ireplace("Created on ", null, $d);
$created = strtotime($d_stripped);

对于第二个和第三个,比我更熟练的正则表达式肯定会提供一个很好的解决方案。

答案 1 :(得分:0)

编辑:是的,这不是太困难

$d = 'Created on November 25, 2009';
$v = 'Viewed 17,603 times';
$h = '1,200 hits';

$d1 = strtotime( str_replace( 'Created On ', '', $d ) );
$v1 = str_replace( ',', '', preg_replace( '/[a-zA-Z\s]+([0-9,]+)[a-zA-Z ]+/', '$1', $v ) );
$h1 = str_replace( ',', '', preg_replace( '/([0-9,]+)[a-zA-Z ]+/', '$1', $h ) );

答案 2 :(得分:0)

使用Kerry的str_replace解决方案。简短,可维护。

您可以使用正则表达式删除逗号,但如果您无法编写它,您将如何修复它?

OR

您可能没有逗号(数字小于1000),一个逗号(1,000-999,999),两个逗号(1,000,000-999,999,999)..然后您可以使用如下表达式:

$v = 'Viewed 17,603 times';
$h = '1,200 hits';
$pattern = '/(\d+)[,]*(\d*)[,]*(\d*)/';
$replacement = '${1}${2}${3}';
echo preg_replace($pattern, $replacement, $v);
echo preg_replace($pattern, $replacement, $h);