2012-03-27 139 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