正则表达式 preg_match 表示字符串中间的数字

regex preg_match for digit in middle for a string

ddw_0_op1
ddw_1_op1
ddw_2_op1
ddw_3_op1
ddw_4_op1

在数组的这些字符串中,我如何提取或preg_match 只提取中间增加的数字。提前致谢

我会在下划线处断开字符串:

$parts = explode('_', $string);
$middle = $parts[1];

如果数字永远不会超过一位数字,您可以简单地使用 $str[4] 来获取字符串的第五个字符(您的数字)。但是,另一方面,如果数字无限期地连续出现,您可以使用以下任一正则表达式。

选项 1

See regex in use here

(?<=_)\d+(?=_)
  • (?<=_) 正面回顾断言前面的是 _
  • \d+ 匹配一位或多位数字
  • (?=_) 正面前瞻断言接下来是 _

选项 2

See regex in use here: 这种方法比前面的方法用的步骤少

_\K\d+(?=_)
  • _字面匹配
  • \K 重置报告匹配的起点。任何先前消耗的字符不再包含在最终匹配中
  • \d+ 匹配一位或多位数字
  • (?=_) 正面前瞻断言接下来是 _

使用preg_match函数:

$str = "ddw_01_fdfd";
preg_match('/.+_([0-9]+)_.+/', $str, $matches);
echo $matches[1];

输出:

01

另一种方法是通过 _:

分解字符串
$xpl = explode('_', $str);
$middleStr = $xpl[1];

explode 函数按字符串拆分字符串,在这种情况下,创建一个数组,该数组由 $str 中包含的所有子字符串除以 _

试试看 here.