正则表达式(特别是preg_split()PHP)
我在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\
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"
}