如何从字符串中提取数字集合?

时间:2013-10-04 08:12:34

标签: php regex string preg-match

我需要从字符串中提取项目编号。如果项目编号已修复,则很容易,但可以是P.XXXXXP XXXXXPXXXXX

我可以使用像preg_match这样的简单函数吗?如果是这样,我的正则表达式是什么?

6 个答案:

答案 0 :(得分:1)

确实 - 如果这是更大的字符串的一部分,例如"The project (P.12345) is nearly done",您可以使用:

preg_match('/P[. ]?(\d{5})/',$str,$match);
$pnumber = $match[1];

否则,如果字符串始终只是P.12345字符串,则可以使用:

preg_match('/\d{5}$/',$str,$match);
$pnumber = $match[0];

虽然您可能更喜欢顶级示例的更明确的匹配。

答案 1 :(得分:1)

试试这个:

if (preg_match('#P[. ]?(\d{5})#', $project_number, $matches) {
    $project_version = $matches[1];
}

Regular expression visualization

Debuggex Demo

答案 2 :(得分:1)

你说项目编号是5位长的4位,所以:

preg_match('/P[. ]?(\d{4,5})/', $tring, $m);
$project_number = $m[1];

答案 3 :(得分:0)

使用explode()函数来拆分

答案 4 :(得分:0)

假设您要从字符串中提取XXXXX并且XXXXX都是整数,您可以使用以下内容。

preg_replace("/[^0-9]/", "", $string);

您可以使用方括号内的^插入符字符来否定表达式。因此,在这种情况下,它将替换任何不是数字的东西。

答案 5 :(得分:0)

我会使用这种正则表达式:/.*P[ .]?(\d+).*/

以下是一些测试线:

$string = 'This is the P123 project, with another useless number 456.';
$project = preg_replace('/.*P[ .]?(\d+).*/', '$1', $string); 
var_dump($project);

$string = 'This is the P.123 project, with another useless number 456.';
$project = preg_replace('/.*P[ .]?(\d+).*/', '$1', $string);
var_dump($project);

$string = 'This is the P 123 project, with another useless number 456.';
$project = preg_replace('/.*P[ .]?(\d+).*/', '$1', $string);
var_dump($project);