Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用正则表达式获取数字后面的字符_Php_Regex - Fatal编程技术网

Php 如何使用正则表达式获取数字后面的字符

Php 如何使用正则表达式获取数字后面的字符,php,regex,Php,Regex,假设我有下面一行: 1309270927C1642,61N654NONREF 现在我想在第一个数字后面得到C或D。现在这里有一些规则 前6位数字始终存在 之后的4位数字是可选的 在这之后,您有一个D或C 现在我想通过回顾来解决这个问题: /(?您可以使用PCRE\K运算符: \d{6,10}\K[DC] 它将省略到D或C为止的匹配中的所有内容。您可以进一步调整此正则表达式,允许或不允许更多字符进入字符类[DC] 看一看这张照片 示例代码: $re = "/\\d{6,10}\\K[DC]/"

假设我有下面一行:

1309270927C1642,61N654NONREF
现在我想在第一个数字后面得到
C
D
。现在这里有一些规则

  • 前6位数字始终存在
  • 之后的4位数字是可选的
  • 在这之后,您有一个
    D
    C
  • 现在我想通过回顾来解决这个问题:


    /(?您可以使用PCRE
    \K
    运算符:

    \d{6,10}\K[DC]
    
    它将省略到
    D
    C
    为止的匹配中的所有内容。您可以进一步调整此正则表达式,允许或不允许更多字符进入字符类
    [DC]

    看一看这张照片

    示例代码:

    $re = "/\\d{6,10}\\K[DC]/"; 
    $str = "1309270927C1642,61N654NONREF"; 
    preg_match_all($re, $str, $matches);
    
    此外,这里还有一些关于
    \K
    运算符的信息:

    \d{6,10}\K[DC]
    
    在Perl、PCRE(C、PHP、R…)中提供的\K“keep out”动词
    
    和Ruby 2+。\K告诉引擎删除它匹配的任何内容,所以
    距离要返回的匹配项很远。

    而不是(?我将使用a,如下所示:

    $string = "1309270927C1642,61N654NONREF";
    $pattern = '/\d{6,10}(C|D)/';
    preg_match($pattern, $string, $matches);
    // $matches[1] contains the contents of the first subpattern
    echo $matches[1];
    

    /(?:\d{6,10})(d|C)的结果相同/
    ,据我所知。@VladPreda:不,不是。我的正则表达式只返回
    C
    ,而你的正则表达式返回
    1309270927C
    。对我也适用。我不确定
    PHP
    是否支持
    \K
    选项。
    \K
    非常好,因为它允许使用变量进行查找length@hek2mgl:
    \K
    在PHP中是受支持的,但它不是一个完整的后向查找(它不允许多次回溯)。它还不错,只是不是一个完整的后向查找。这就是@hek2mgl的意思:-)正如旁白所说,因为没有答案提到它,
    (?:\d{6,10})d|C
    将与
    (?:\d{6,10})匹配如果要使其匹配
    (?:\D{6,10})
    ,则
    D
    C
    ,则需要一个组(捕获组或非捕获组)来限制
    操作符的范围:
    (?:\D{6,10})(D{C)