我想把这个字符串拆分成3个数组元素。
$string = 'MW 01:00 PM - 02:30 PM';
输出量:
array[0] = MW array[1] = 01:00 PM array[2] = 02:30 PM
帮助我使用正则表达式,它将该字符串提取到数组中。
^[a-zA-Z\d-_]+$
lxkprmvk1#
您可以在空格处split,如果前面有digit,则可以使用lookahead。
$arr = preg_split('/ +-? *(?=\d)/', $str);
See demo at regex101.com
bgtovc5b2#
<?php $str = "MW 01:00 PM - 02:30 PM"; $matches = []; preg_match("/^([a-zA-Z]+)\s+(\d{1,2}:\d{1,2}\s+PM)\s+\-\s+(\d{1,2}:\d{1,2}\s+PM)$/",$str,$matches); print_r($matches);
输出
Array ( [0] => MW 01:00 PM - 02:30 PM [1] => MW [2] => 01:00 PM [3] => 02:30 PM )
说明:
^
$
([a-zA-Z]+)\s+
\d{1,2}
1
01
11
Regex demo
wwtsj6pe3#
这也是有效的(但更长):
$str = "MW 01:00 PM - 02:30 PM"; preg_match('/([A-Z]{2}) ([0-9]{2}:[0-9]{2} [A-Z]{2}) - ([0-9]{2}:[0-9]{2} [A-Z]{2})/', $str, $match); echo '<pre>' . print_r($match, true) . '</pre>';
vu8f3i0k4#
虽然you can split on sequences of one or more spaces and/or hyphens which are followed by a digit,但regex并不是唯一的选择。这是一个文本提取任务,而不是文本验证任务。看看sscanf()有多简洁。当您有一个可预测格式且没有可选字符的字符串时,通常足够的sscanf()会有所帮助。%s(在scanf()和printf()函数中)用于匹配可见字符(而不是空格)。%标记占位符的开始,(可选)下一个数字指定要匹配的字符数,然后字符类/否定字符类定义哪些字符将符合匹配条件。代码:(Demo)
sscanf()
%s
scanf()
printf()
%
$string = 'MW 01:00 PM - 02:30 PM'; var_export( sscanf($string, '%s %8[^-] - %8[^-]') );
array ( 0 => 'MW', 1 => '01:00 PM', 2 => '02:30 PM', )
作为需求的扩展,如果希望将每个变量组件隔离为输出数组中的单独元素,请参见以下实现。代码:(Demo)
var_export( sscanf($string, '%s %2s:%s %s - %2s:%s %s') );
array ( 0 => 'MW', 1 => '01', 2 => '00', 3 => 'PM', 4 => '02', 5 => '30', 6 => 'PM', )
--要将小时和分钟子字符串转换为整数,请使用%d。(Demo)
%d
var_export( sscanf($string, '%s %d:%d %s - %d:%d %s') );
4条答案
按热度按时间lxkprmvk1#
您可以在空格处split,如果前面有digit,则可以使用lookahead。
See demo at regex101.com
bgtovc5b2#
输出
说明:
^
和$
。([a-zA-Z]+)\s+
用于匹配字母字符沿着1个额外的空格。\d{1,2}
用于匹配1或2位时间(如1
,01
,11
等)Regex demo
wwtsj6pe3#
这也是有效的(但更长):
输出量:
vu8f3i0k4#
虽然you can split on sequences of one or more spaces and/or hyphens which are followed by a digit,但regex并不是唯一的选择。这是一个文本提取任务,而不是文本验证任务。看看
sscanf()
有多简洁。当您有一个可预测格式且没有可选字符的字符串时,通常足够的
sscanf()
会有所帮助。%s
(在scanf()
和printf()
函数中)用于匹配可见字符(而不是空格)。%
标记占位符的开始,(可选)下一个数字指定要匹配的字符数,然后字符类/否定字符类定义哪些字符将符合匹配条件。代码:(Demo)
输出量:
作为需求的扩展,如果希望将每个变量组件隔离为输出数组中的单独元素,请参见以下实现。
代码:(Demo)
输出量:
--
要将小时和分钟子字符串转换为整数,请使用
%d
。(Demo)