Php 正则表达式在单词后获取字符串的一部分
我正在分析一个字符串,并将该字符串的每个部分分配到与其类型对应的变量中: 例如Php 正则表达式在单词后获取字符串的一部分,php,regex,Php,Regex,我正在分析一个字符串,并将该字符串的每个部分分配到与其类型对应的变量中: 例如 01:29:05 success login is successful : username 所以我必须这样做: preg_match("/(1[012]|0[0-9]):[0-5][0-9]:[0-5][0-9]/", $str, $time); echo $time[0]; 现在我有时间了。下一个是日志的状态 preg_match("/success|failure|warning/", $str, $st
01:29:05 success login is successful : username
所以我必须这样做:
preg_match("/(1[012]|0[0-9]):[0-5][0-9]:[0-5][0-9]/", $str, $time);
echo $time[0];
现在我有时间了。下一个是日志的状态
preg_match("/success|failure|warning/", $str, $status);
echo $status[0];
问题是下一个$message
和$user
。$user
是可选的,有些日志没有此选项。对于$消息
,我只想获取$状态
后面和冒号前面的字符串:
:
我对消息部分的尝试
preg_match(("/($status[0])+:*/"), $str, $message);
有什么办法可以解决这个问题,或者有更简单的方法
编辑
Array
(
[0] => 01:29:05 success login is successful : username
[1] => 01:29:05
[2] => success
[3] => login is successful
[4] => username
)
所需的输出应如下所示:
array('
'time'=> '01:29:05',
'status'=> 'success',
'message'=> 'login is successful',
'user' => 'username'
')
如果输出的格式相同,则使用 尝试使用此正则表达式模式
([\d::]+)(\w+)([a-zA-z]+):([a-zA-z]+)
,您将在输出数组的相应索引上获得第一个、第二个和第三个匹配项
你喜欢这样吗
$input_line="01:29:05 success login is successful : username";
preg_match("/([\d :]+)(\w+) ([a-zA-z ]+) : ([a-zA-z]+)/", $input_line, $output_array);
print_r($output_array);
输出
Array
(
[0] => 01:29:05 success login is successful : username
[1] => 01:29:05
[2] => success
[3] => login is successful
[4] => username
)
当我准备答案时,一个已经被接受了。不管怎样,我把它放在这里了
preg_match("/(?P<time>\d{2}:\d{2}:\d{2}) (?P<status>\w*) (?P<message>[^:]*) : (?P<user>.*)/", $str, $results)
preg_match(“/(?P\d{2}:\d{2}:\d{2})(?P\w*)(?P[^:]*):(?P.*)/”,$str,$results)
解释
- 结果数组将附加到位置匹配1、2、3和4中,其中包含键“时间”、“状态”、“消息”和“用户”。优点是在修改表达式时,不再需要考虑捕捉位置李>
演示在这里个人比赛应该是什么样子。你能在你的问题中包括吗?好的,我添加了所需的输出,将其保存在数组中是不必要的。问题是我没有得到
$status
,考虑到我提到的所需结果,我想这确实是最适合这个问题的