如何在php下面使用正则表达式

时间:2011-05-17 13:12:42

标签: php

我有一个包含70000多条记录的数据库,其主键值从1位数开始。

所以我希望用户必须在url中输入nm0000001而不是1。在代码部分,我必须丢弃除1之外的其余值。

但我的问题是我希望这种类型的东西在字符串中有9个字母,模式就像这样

1    - nm0000001
9    - nm0000009
10   - nm0000010
2020 - nm0002020

从上面的模式我只想在php中使用像1,9,10,2020这样的数字。

4 个答案:

答案 0 :(得分:5)

下面:

$i = (int)substr($input, 2);

根本没有理由使用正则表达式。

无论如何,如果你坚持使用正则表达式,那么:

$input = 'nm0002020';
preg_match('~0*(\d+)$~', $input, $matches);
var_dump($matches[1]);

答案 1 :(得分:3)

假设URL中的值是作为查询字符串参数接收的,即通过$_GET['id']id之外的其他名称传递:

// Trim the "nm" off the front
$pk = substr($_GET['id'],2);
// And parse out an integer value.
$id = intval($pk);

答案 2 :(得分:2)

在这里绝对没有使用正则表达式 - 使用sprintf("nm%07d", ...)格式化substr并使用强制转换为int来解析。

答案 3 :(得分:0)

这个功能可以解决问题:

function extractID($pInput)
{
    $Matches = array();    
    preg_match('/^nm0*(.*)$/', $pInput, $Matches);
    return intval($Matches[1]);
}

这就是/^nm0+(.*)$/工作的原因:

  1. 该行必须以^
  2. 开头(nm
  3. 该模式必须至少有一个0
  4. nm0之后的第一个非零字符...,捕获值(这是括号的工作)
  5. 继续直到行尾($