簡體   English   中英

正則表達式(特別是preg_split()PHP)

[英]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);

請參閱正則表達式演示IDEONE演示

模式意味着:

  • (\\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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM