在正则表达式中包含匹配的部分

时间:2016-02-01 20:29:22

标签: php regex

我的尝试:

$a = preg_split("/[0-9](\-)[0-9]/", $d);
print_r($a);

如果$d=sometext9-9sometext,我希望能够从print_r($a);

获取
Array
(
    [0] => sometext9
    [1] => -
    [2] => 9sometext
)

我错过了什么?

1 个答案:

答案 0 :(得分:3)

您可以使用

$re = "/(?<=[0-9])(-)(?=[0-9])/"; 
$str = "sometext9-9sometext"; 
$a = preg_split($re, $str, $matches, PREG_SPLIT_DELIM_CAPTURE);
print_r($a);

IDEONE demo。由于-在第1组(用(...)括起来)并且我们使用PREG_SPLIT_DELIM_CAPTURE flag,因此连字符作为结果数组的一部分返回。

  

PREG_SPLIT_DELIM_CAPTURE
  如果设置了此标志,则将捕获并返回分隔符模式中的括号表达式

lookarounds (?<=[0-9])(?=[0-9])检查但不消耗两端的数字,因此它们保存在与{{1}相邻的元素中}}。在Lookarounds Stand their Ground了解有关该行为的更多信息。