PHP:复杂正则表达式


PHP : complex Regular expression

你好,我已经创建了一个示例页面,请参阅这里

我想分别获得事件名称和时间。有人能帮我吗?

例如

。从

行开始
***ENGLISH* MLB: Philadelphia Phillies at Miami Marlins 12.00am-3.00am Stream 7**

注:**英文总是不同的…时间变化为上午,下午

我希望事件名称,时间和流号分别如下

MLB: Minnesota Twins at Atlanta Braves
12.00am-3.00am
7

我试过了

$game = file_get_contents("http://livestreamly.com/");
preg_match_all('/<font color="gold">(.*?)<p>/',$game,$match);

这给了整个生活。

我已经检查了您的网站,这个正则表达式是有效的您的问题

/<'/font>([a-zA-Z0-9''.: -]+)([0-9]{1,2}.+?[0-9]{1,2}[a,p,A,P,m,M]{2})-([0-9]{1,2}[.:]+?[0-9]{1,2}[a,p,A,P,m,M]{2}) <font color="red">Stream ([0-9]+)<'/font>/

我已经检查了http://regexpal.com/当你使用preg_match_all;输出数组匹配将包含您需要的信息。您需要转义此正则表达式中的一些字符以将其放入php变量。

PHP有效代码:

$match = array();
preg_match_all('/<'/font>([a-zA-Z0-9''.: -]+)([0-9]{1,2}.+?[0-9]{1,2}[a,p,A,P,m,M]{2})-([0-9]{1,2}[.:]+?[0-9]{1,2}[a,p,A,P,m,M]{2}) <font color="red">Stream ([0-9]+)<'/font>/',file_get_contents("http://livestreamly.com/"),$match);
print_r($match);

部分输出:

[1] => array(37) {
    [0] => string(45) " MLB: Philadelphia Phillies at Miami Marlins "
    [1] => string(40) " MLB: Minnesota Twins at Atlanta Braves "
    [2] => string(39) " MLB: Cincinnati Reds at New York Mets "
[2] => array(37) {
    [0] => string(14) "12.00am-3.00am"
    [1] => string(14) "12.00am-3.00am"
    [2] => string(14) "12.00am-3.00am"
    [3] => string(14) "12:00am-3:00am"
    [4] => string(14) "12.15am-2.15am"
    [5] => string(14) "12.30AM-3.30AM"
[3] => array(37) {
    [0] => string(1) "6"
    [1] => string(1) "7"
    [2] => string(1) "8"
    [3] => string(1) "9"
    [4] => string(2) "10"

工作原理

首先查找子模式[a-zA-Z0-9'.: -]+,这意味着字符从a-z和a-z,数字从0-9 '。: or -必须至少出现一次或多次。

 ([0-9]{1,2}.+?[0-9]{1,2})  

之后查找hour的第一部分,它是数字并且有1或2个数字,然后i可以是任何字符至少一次。然后其他数字(分钟)至少1或2位。

 [a,p,A,P,m,M]{2}

负责AM或AM或pm或pm,也可以是AA或MM,但这里不重要。

<font color="red">Stream ([0-9]+)<'/font>

这一行负责获取流的编号,它是数字的,需要至少是1位或更多。