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
。现在这里有一些规则
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)
。