RegEx模式帮助(php)


RegEx Pattern Help (php)

经过几个小时的努力,我终于认输了,求助于专家。。。

我有一个日志文件,我正试图从中提取字符串。

格式如下:

12:00 SomeText:
1:20 MoreText:

"SomeText/MoreText"是我需要的。我已经想出了下面的代码,但没有得到任何接近我预期的结果:

$string = "12:00 SomeText: blah, blah, blah not important";
$regex = '/[0-9]:[0-9] (.*?)': /';
$entity = preg_split($regex, $string);

我所理解的正则表达式逻辑是,任何数字,后面跟着冒号,后面跟着任何数字,然后跟着空格,文本,后面跟着结肠,然后跟着空白

如果能朝着正确的方向前进,我们将不胜感激!

谢谢Chris

您匹配的是一个单个数字、一个冒号,然后是一个个单个数字。

$string = "12:00 SomeText: blah, blah, blah not important";
$regex = '/[0-9]+:[0-9]+ ([^:]+)/';
$entity = array();
preg_match($regex, $string, $entity);

这将匹配一个或多个数字,一个冒号,一个或更多个数字,其余的。preg_match将把整个匹配表达式(12:00某些文本)放在位置0,然后是匹配的子表达式(某些文本),所以你的"某些文本"将在$entity[1]

[编辑]经过评论中的讨论,我改进了与页眉的匹配。以前,你有

(.*?)':

它将查找任意字符,直到字符串的末尾(可选),然后回溯直到找到冒号。我已经用替换了它

([^:]+)

它将查找一个或多个不是冒号的字符并与其匹配。这样就避免了regex查看"废话,废话,废话…"然后忽略它刚刚找到的内容。