2012-03-27 141 views
1

我從來沒有真正使用過正則表達式,因此我有幾個問題。PHP preg_match() - 正則表達式模糊?

基本上我已經建立了一個簡單的類,返回用戶指定的標籤之間的文本。

function getData($tagname){ 
    $this->tagname = $tagname; 
    $string = $this->dump; 
    $pattern = "/<$tagname>(.*?)<\/$tagname>/s"; 
    preg_match($pattern,$string,$matches,PREG_OFFSET_CAPTURE); 
    print_r($matches); 
} 

這是給我所需的信息,但它返回數組中的多個副本,即時通訊只是想知道背後的原因是什麼?

例如

$depData->getData('departureTime'); 

返回

Array ([0] => Array ([0] => 2012/03/07 12:45:13 [1] => 41) [1] => Array ([0] => 2012/03/07 12:45:13 [1] => 56)) 

林認爲它的東西與我的正則表達式是含糊嗎?

+2

請粘貼您匹配的輸入。 – socha23 2012-03-27 09:17:09

+0

Gorouck 2012/03/07 12:45:13 cosmicsafari 2012-03-27 09:22:12

+0

我敢打賭,這不是你得到的實際結果。你應該在'Array [1]''Array'0''和'2012/03/07 12:45:13'中獲取' 2012/03/07 12:45:13 。 – 2012-03-27 09:29:21

回答

1

它給給你2分的結果首先是爲整個expresion<tag>(.*?)</tag>和第二個結果是對結果的括號(.*?)

此外,我創建了一個例子給你看的之間的差異第一次捕獲(整個表達式)和圓括號捕獲(你的serach)。

http://xrg.es/#1ompqhf

注:我更換<>"給你看的更清楚什麼是不同的。

+0

正如我所說,即時消息不是正則表達式的線索,我將如何去解決這個問題? – cosmicsafari 2012-03-27 09:23:17

+0

沒有問題..你只需要抓住第一個結果..也..如果你不關心表達式的位置..刪除'PREG_OFFSET_CAPTURE'參數。 – SERPRO 2012-03-27 09:26:25

+0

+1生成的嵌套數組有點讓人惱火,但是來自'PREG_OFFSET_CAPTURE'選項,它增加了匹配索引! – stema 2012-03-27 09:33:49