Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.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
正则表达式(特别是preg_split()PHP)_Php_Regex_Wordpress_Preg Match_Preg Split - Fatal编程技术网

正则表达式(特别是preg_split()PHP)

正则表达式(特别是preg_split()PHP),php,regex,wordpress,preg-match,preg-split,Php,Regex,Wordpress,Preg Match,Preg Split,我在PHP应用程序中列出了一些日期,结果如下: 2016年4月至2016年5月至2016年6月等 我正在尝试使用preg\u split将它们格式化为以下格式: array('2016年4月'、'2016年5月'、'2016年6月') 我使用一个在线正则表达式编辑器来确定如何检测4个连续的数字,下面是我取得的成绩: 注意:我还删除了所有空白-理想情况下,如果只有两个以上的空白,即hello-world不会被更改,但hello-world会被更改,则最好只删除空白 preg_split('/\d\

我在PHP应用程序中列出了一些日期,结果如下:

2016年4月至2016年5月至2016年6月等

我正在尝试使用
preg\u split
将它们格式化为以下格式:

array('2016年4月'、'2016年5月'、'2016年6月')

我使用一个在线正则表达式编辑器来确定如何检测4个连续的数字,下面是我取得的成绩:

注意:我还删除了所有空白-理想情况下,如果只有两个以上的空白,即
hello-world
不会被更改,但
hello-world
会被更改,则最好只删除空白

preg_split('/\d\d\d/g',preg_replace('!\s+!','$sidebar_contents))

使用上述方法,我得到一个错误,提示g标识符无效,因为它不是
preg\u match\u all
-在以下情况下删除g结果:

谢谢你的帮助

试试这个:

$str = "April2016May2016June2016"; 
preg_match_all("/[a-z]+\\s\\d+/i", preg_replace("/([a-z]+)(\\d+)/i", "$1 $2", $str), $matches);
print_r($matches[0]);
输出:

Array
(
    [0] => April 2016
    [1] => May 2016
    [2] => June 2016
)

下面是一种通过调用
preg\u match\u all
并在以下步骤后使用
array\u map
实现所需的方法:

preg_match_all('~(\p{L}+)(\d+)~', "April2016May2016June2016", $m);
$result = array_map(function($k, $v) { return $k . " " . $v; }, $m[1], $m[2]);
print_r($result);
请参阅和

该模式意味着:

  • (\p{L}+
    -匹配并捕获到组1(匹配后可通过
    $m[1]
    访问)一个或多个字母
  • (\d+)
    -匹配并捕获到组2中(匹配后可通过
    $m[2]
    访问)一个或多个数字
使用
array\u map
,我们只需将第1组和第2组中的值加上一个空格即可

备选方案:在
preg\u replace\u回调中填写结果数组
(只需一次):


请参见。

您可以插入空格,然后拆分:

<?php
$input = "April2016May2016June2016";
var_dump(preg_split('/(?<=\d)(?!\d|$)/i',
  preg_replace('/(?<!\d)(?=\d)/', ' ', $input)));
?>

您是否尝试过使用
preg\u match\u all
?当您只需要1个正则表达式操作时,为什么要使用2个正则表达式操作?
<?php
$input = "April2016May2016June2016";
var_dump(preg_split('/(?<=\d)(?!\d|$)/i',
  preg_replace('/(?<!\d)(?=\d)/', ' ', $input)));
?>
array(3) {
  [0]=>
  string(10) "April 2016"
  [1]=>
  string(8) "May 2016"
  [2]=>
  string(9) "June 2016"
}