2011-03-28 27 views
0

誰能幫我找到新的快速sharelinkRapidShare的正則表達式

http://rapidshare.com/#!download|943dt|421184201|Tools.rar|7316 

正則表達式,我想有這樣的事情一個

$str = 'blah http://rapidshare.com/#!download|943dt|421184201|Tools.rar|7316 blah'; 
if(preg_match_all('#http://rapidshare\.com/#!download|(.*?)|([^\s]+)#', $str, $m)) { 
    var_dump($m); 
} 

結果

`

array 
    0 => 
    array 
     0 => string 'http://rapidshare.com/#!download|943dt|421184201|Tools.rar|7316' (length=51) 
    1 => 
    array 
     0 => string '943dt' (length=5) 
    2 => 
    array 
     0 => string '421184201' (length=8) 

3 => 
    array 
     0 => string 'Tools.rar' (length=8) 

4 => 
    array 
     0 => string '7316' (length=8)` 

回答

0
@http://rapidshare\.com/#!download|(.*?)|(\d+)|([^\s]+)|(\d+)@ 

鑑於您的示例鏈接,應該這樣做。

+1

它不會,**#**在這種情況下是修飾符。 – 2011-03-28 23:08:55

+0

如果你想直接匹配它們,你需要跳過這些管道('|')。 – 2011-03-28 23:36:50

0
$string = "blah http://rapidshare.com/#!download|943dt|421184201|Tools.rar|7316 blah http://rapidshare.com/#!download|1233dt|123484201|Porn.rar|7232316"; 
preg_match_all("#http:\/\/rapidshare\.com\/([^\s]+)#is", $string, $matches); 

$matches = $matches[0]; 

foreach($matches as $match){ 
    $pieces = explode("|", $match); 
    unset($pieces[0]); 
    $pieces[0] = $match; 
    $result[] = $pieces; 
} 

print_r($result); 

結果...

Array 
(
    [0] => Array 
     (
      [1] => 943dt 
      [2] => 421184201 
      [3] => Tools.rar 
      [4] => 7316 
      [0] => http://rapidshare.com/#!download|943dt|421184201|Tools.rar|7316 
     ) 

    [1] => Array 
     (
      [1] => 1233dt 
      [2] => 123484201 
      [3] => Porn.rar 
      [4] => 7232316 
      [0] => http://rapidshare.com/#!download|1233dt|123484201|Porn.rar|7232316 
     ) 

) 
1

能否請您試試這個正則表達式:

$str = 'blah http://rapidshare.com/#!download|943dt|421184201|Tools.rar|7316 blah'; 
if(preg_match(
'@http://rapidshare.com/#!download\|([^\|]+)\|([^\|]+)\|([^\|]+)\|([^\|\s]+)@', 
    $str, $m)) { 
    var_dump($m); 
} 

// prints 
array(5) { 
    [0]=> 
    string(63) "http://rapidshare.com/#!download|943dt|421184201|Tools.rar|7316" 
    [1]=> 
    string(5) "943dt" 
    [2]=> 
    string(9) "421184201" 
    [3]=> 
    string(9) "Tools.rar" 
    [4]=> 
    string(4) "7316" 
} 

更新

不知道在文本中的換行符存在。如果是這樣的情況下,使用下面的代碼首先對正則表達式匹配之前刪除換行符字符:

preg_match(
'@http://rapidshare.com/#!download\|([^\|]+)\|([^\|]+)\|([^\|]+)\|([^\|\s]+)@', 
    str_replace("\n", "", $str), $m) 
+0

它不匹配所有鏈接,也不匹配換行符。 – 2011-03-28 23:25:16

+0

@webarto:我在OP的問題中沒有看到換行要求。你能告訴我哪些鏈接不起作用嗎?我只有一個示例鏈接來測試它。 – anubhava 2011-03-28 23:28:40

+0

他顯然是試圖爲warez搜索引擎構建爬蟲,他想抓取論壇帖子,所以換行是必須的。你的代碼是好的。 – 2011-03-28 23:30:35

0

正則表達式是真正爲這個錯誤的工具,IMO。您應該只使用字符串操作將其拆分爲|字符,然後忽略結果數組中的第一個字符串,該字符串應該是http://rapidshare.com/#!download。應該更簡單,更快,更容易調試。

相關問題