2012-05-06 86 views
3

我想從這樣的URI列表解析整數返回只需要匹配:如何使用的preg_match

uri.com/upload/123456789_abc.ext 

我使用這個模式:

preg_match("#uri\.com\/upload\/(.*?)_#is", $uri, $match); 

其中一期工程和回報:

Array 
(
    [0] => uri.com/upload/123456789_ 
    [1] => 123456789 
) 

但我想知道是否有辦法讓$ match ==「123456789」intead返回一個數組與多個VA梅毒。

是否有可能通過只修改模式來做到這一點?

+2

[你怎麼看?](http://php.net/manual/en/function.preg-match.php)*「如果提供**匹配**,則會填充結果搜索。$ matches [0]'將包含與完整模式相匹配的文本,'$ matches [1]'將具有與第一個捕獲的括號內子模式相匹配的文本,依此類推。「* –

+0

您可以定義自定義函數如果這確實是一個嚴重的要求。 – mario

回答

5

它會一直返回一個數組,但你可以改變模式,以便它只匹配你想要的。

$uri = "uri.com/upload/123456789_abc.ext"; 
preg_match('#(?<=uri\.com/upload/)\d+#is', $uri, $match); 
print_r($match); 

返回

陣列([0] => 123456789)

所以它仍然是一個數組,但它確實僅包含整個匹配,即你的電話號碼。

(?<=uri\\.com/upload/)是一個倒序,它不匹配那部分,所以它不是結果的一部分。

\d+只匹配數字,所以不再需要_

0

不在php中。另一方面,在perl中,你確實有自動變量,例如引用最後一個匹配正則表達式的$ 1,$ 2。也就是說,在你的例子中,執行匹配後,$ 1變量將保存整數。

所以這個想法一般都可以。你會喜歡perl .. :-)

+0

我更喜歡Ruby的方式;) – troelskn