regex preg_match用于字符串的中间数字

时间:2018-02-05 16:53:31

标签: php regex preg-match

ddw_0_op1
ddw_1_op1
ddw_2_op1
ddw_3_op1
ddw_4_op1

在这些数组字符串中我怎么能只提取或preg_match中间增加的数字。提前谢谢

3 个答案:

答案 0 :(得分:1)

我会在下划线上打破字符串:

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

答案 1 :(得分:1)

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

选项1

See regex in use here

(?<=_)\d+(?=_)
  • (?<=_)正面的后瞻断言先于_
  • \d+匹配一个或多个数字
  • (?=_)肯定后面的正面前瞻是_

选项2

See regex in use here:此方法比前一步使用更少的步骤。

_\K\d+(?=_)
  • _按字面意思匹配
  • \K重置报告的匹配的起点。最终匹配中不再包含任何以前消费的字符
  • \d+匹配一个或多个数字
  • (?=_)肯定后面的正面前瞻是_

答案 2 :(得分:0)

使用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