2013-03-15 80 views
0

我有一個可以用不同方式查看的字符串。匹配號碼及其旁邊的特殊字符

$str = "11:00 Team1 - Team2 0-0" 
$str = "4' Team1 - Team2 2-1" 
$str = "Half time Team1 - Team2 2-1" 
$str = "55' Team1 - Team2 3-1" 
$str = "Finished Team1 - Team2 2-1" 

通過使用正則表達式,我想知道什麼時候該字符串包含「數字+:+數字」,「數字+'」,並沒有前兩個組合。此外,我想提取「數字+ - +數字」。

我已經試過這對於第二個例子:

preg_match("/[0-9+']/", $str) 

回答

1

這些都是你需要的正則表達式:

對於第一種:(號碼+:+號碼)

/[0-9]+:[0-9]+/ 

對於第二個:(數字+')

/[0-9]+'/ 

對於第三:(號碼+ - +號)

/[0-9]+-[0-9]+/ 
+0

正是我需要的 - thx! – Christoffer 2013-03-15 10:35:59

0
$ret = preg_match_all('/^([0-9]+\'|:)/', $str, $matches); 
var_dump($ret) // 0 for no match, 1 for match 
+0

您已經分配給'$ matches'比賽。無需將它放入'$ ret'中。 – jurgemaister 2013-03-15 10:20:15

+0

$ ret返回preg_match的結果(例如true | false),$ matches是找到的實際匹配數組。 – djjjuk 2013-03-15 10:28:10

+0

你說得對。 Brainfart by me> _ < – jurgemaister 2013-03-15 11:15:28

0

正確表達式匹配所有的情況下將是

\d+[:'-]\d* 

它匹配一個或多個數字,然後是一個冒號「或短劃線,然後是零個或多個數字。

PHP例如

$str[] = "11:00 Team1 - Team2 0-0"; 
$str[] = "4' Team1 - Team2 2-1"; 
$str[] = "Half time Team1 - Team2 2-1"; 
$str[] = "55' Team1 - Team2 3-1"; 
$str[] = "Finished Team1 - Team2 2-1"; 

foreach($str as $s) { 
    preg_match_all("/\d+[:'-]\d*/", $s, $res); 
    print_r($res); 
} 

打印

Array ([0] => Array ([0] => 11:00 [1] => 0-0)) 
Array ([0] => Array ([0] => 4' [1] => 2-1)) 
Array ([0] => Array ([0] => 2-1)) 
Array ([0] => Array ([0] => 55' [1] => 3-1)) 
Array ([0] => Array ([0] => 2-1)) 

Live fiddle