2012-06-25 88 views
-1

考慮下面的字符串:正則表達式的正則表達式ID

  • [下載ID = 「1」]
  • [下載ID = 「1」 ATTR = 「」]
  • [下載ATTR = 「」 ID = 「1」]
  • [下載ATTR = 「」 ID = 「1」 ATTR = 「」]

ID始終是一個數。我需要一個正則表達式,總是會給我通過PHP使用的數字,最好通過http://www.solmetra.com/scripts/regex/index.php進行演示。

+7

普通expressi ons不是解析器。 –

+0

這是整個字符串,或者是一個更大的字符串的一部分?你能舉一個更完整的例子嗎? – Kobi

+2

爲什麼要求一個正則表達式?詢問你面臨的問題,即提取「id」屬性的值。不要求特定的解決方案機制。 [X-Y問題】(http://meta.stackexchange.com/a/66378) –

回答

0

試試這個:

/\[download.*?id=\"(\d+)\"/ 

函數調用:

preg_match_all('/\[download.*?id=\"(\d+)\"/', '{{your data}}', $arr, PREG_PATTERN_ORDER); 
1
preg_match_all('/id="(\d+)"/', $data, $matches); 
+1

這將匹配也squid =「123」 –

+0

@WalterTross,這是不可能的字符串;) – Alexander

+1

直到一天魷魚偷偷潛入 –

0

假設你將永遠有一個id的領域,而且它總是引號括起來(")你可以嘗試像這樣的正則表達式:id="(\d+)"。這將捕獲該數字並將其放入一個組中。你可以看看here看看你如何才能訪問這些組。

正如有人建議,如果你想匹配更多的領域,我會建議你刪除正則表達式,並找到能夠解析你傳遞的字符串的東西。

0

,你可以很容易地使用INI文件,並在需要的不是正則表達式,例如:

test.ini

[download] 
id=1 
attr = "" 
[download2] 
id=2 
attr = "d2" 

和索引。PHP

$ini = parse_ini_file('test.ini', true); 
print_r($ini); 
+0

這是一個非常奇怪的答案。爲什麼你認爲OP在格式上有任何選擇?即使如此 - ini?!我倒是覺得有更好的選擇,現在天... – Kobi

+0

我只是想記住這樣.. –

0

這是我的解決方案:

<?php 

    $content = 
<<<TEST 
[download id="1"] 
[download id="2" attr=""] 
[download attr="" id="3"] 
[download attr="" id="4" attr=""] 
TEST; 

    $pattern = '/\[download.*[ ]+id="(?P<id>[0-9]+)".*\]/u'; 

    if (preg_match_all($pattern, $content, $matches)) 
     var_dump($matches); 

?> 

作品與單個線路輸入(在$比賽讀[ 'ID'] [0])或具有多行輸入(如的示例中,迭代上$比賽[ 'ID']數組)。

注:

  • 不要開始使用的preg_match ^,結束$分隔符,改用preg_match_all無定界符
  • 不要使用 「S」 PCRE_DOTALL修飾符
  • 使用「i」的修改,如果你想在正則表達式可工作在「下載」或「下載」
  • 使用「U」修飾符如果輸入是UTF-8編碼的字符串

http://it.php.net/manual/en/function.preg-match-all.php

http://it.php.net/manual/en/reference.pcre.pattern.modifiers.php

上面的示例將輸出此:

array(3) { 
    [0]=> 
    array(4) { 
    [0]=> 
    string(17) "[download id="1"]" 
    [1]=> 
    string(25) "[download id="2" attr=""]" 
    [2]=> 
    string(25) "[download attr="" id="3"]" 
    [3]=> 
    string(33) "[download attr="" id="4" attr=""]" 
    } 
    ["id"]=> 
    array(4) { 
    [0]=> 
    string(1) "1" 
    [1]=> 
    string(1) "2" 
    [2]=> 
    string(1) "3" 
    [3]=> 
    string(1) "4" 
    } 
    [1]=> 
    array(4) { 
    [0]=> 
    string(1) "1" 
    [1]=> 
    string(1) "2" 
    [2]=> 
    string(1) "3" 
    [3]=> 
    string(1) "4" 
    } 
} 

所以,可以讀出的ID屬性上$循環比賽[ 'ID']陣列:)