我的字符串看起来像这样05/21/2018 ghijkl 06/12/2018 mnopqrst
我需要提取每个日期之后的所有值并包括日期。我尝试过
explode('/2018', $string);
但是那会分开日期,也不是面向未来的。我在想必须有一种在元素中包含定界符的方法。也许我应该使用正则表达式来查找日期?
谢谢。
答案 0 :(得分:0)
您可以使用current(explode('/', $string));
答案 1 :(得分:0)
假设您的日期被保证按照您提到的格式进行格式化(如果是用户输入数据,则通常认为这样做不安全),则可以使用正则表达式在日期之后查找字符串:
使用带有以下表达式的PHP正则表达式拆分:
uploadFile
将/([0-9]{1,2}\/[0-9]{1,2}\/[0-9]{2,4})([a-zA-Z\s]+)/g
分成具有不同组的数组。根据实际需要输出数据的方式,可以在一个匹配组中捕获日期和后续字符串。
示例代码:
05/21/2018 ghijkl 10/12/2017 mnopqrst
答案 2 :(得分:0)
您可以这样做
$str = '05/21/2018 ghijkl 10/12/2017 mnopqrst';
$arr = explode(' ',$str);
$new = array();
for($i=0;$i<count($arr);$i+=2){
$new[] = ["date"=>$arr[$i],"value"=>$arr[$i+1]];
}
print_r($new);
输出:
Array
(
[0] => Array
(
[date] => 05/21/2018
[value] => ghijkl
)
[1] => Array
(
[date] => 10/12/2017
[value] => mnopqrst
)
)
答案 3 :(得分:0)
您可以使用正则表达式来实现。这是示例代码:
<?php
$string = '05/21/2018 ghijkl 06/12/2018 mnopqrst';
$matches = [];
if (preg_match_all('#(\d{2}\/\d{2}\/\d{4})#i', $string, $matches) > 0) {
echo "Found the following dates: \n";
foreach ($matches[0] as $date) {
printf("- %s\n", $date);
}
}
这将导致以下输出:
Found the following dates:
- 05/21/2018
- 06/12/2018
答案 4 :(得分:0)
您可以将preg_split与PREG_SPLIT_DELIM_CAPTURE
和PREG_SPLIT_NO_EMPTY
标志一起使用,以保留定界符并从结果数组中删除空值。
您可以使用与日期格式\b\d{1,2}/\d{1,2}/\d{4}\b
匹配的模式(请注意,它与示例数据中的日期格式匹配并且不验证日期本身)
例如:
$str = '05/21/2018 ghijkl 06/12/2018 mnopqrst';
$result = preg_split('@(\b\d{1,2}/\d{1,2}/\d{4}\b)@', $str, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
var_dump($result);
要验证日期,您可以使用DateTime,也可以使用createFromFormat指定格式。
$date = DateTime::createFromFormat("m/d/Y", '05/21/2018');