[英]Regular Expressions (Specifically preg_split() PHP)
我在PHP應用程序中列出了一些日期,結果如下:
April2016May2016June2016
等
我正在嘗試使用preg_split
來格式化它們:
array('April 2016', 'May 2016', 'June 2016')
我使用在線正則表達式編輯器來確定如何檢測4個連續數字,這是我得到了多遠:
注意:我也刪除了所有的空格 - 理想情況下,如果只有2個以上的空格才能刪除空格,這樣會更好,即hello world
不會被改變,但hello world
會。
preg_split('/\\d\\d\\d\\d/g', preg_replace('!\\s+!', '', $sidebar_contents));
使用上面的代碼,我得到一個錯誤,表明g標識符無效,因為它不是preg_match_all
- 刪除以下內容中的g結果:
謝謝你的幫助!
這是一種通過調用preg_match_all
並在之后使用array_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_map
,我們只是將第1組和第2組的值與空格連接起來。
替代方法 :在preg_replace_callback
填充結果數組(只需一次傳遞!):
$result = array();
preg_replace_callback('~(\p{L}+)(\d+)~', function($m) use (&$result) {
array_push($result, $m[1] . " " . $m[2]);
}, "April2016May2016June2016");
print_r($result);
請參閱IDEONE演示 。
您可以插入空格然后拆分:
<?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"
}
試試這個:
$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
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.