2011-03-31 31 views
-1

我很抱歉,我已經要求這一點,但無法找到一個解決辦法尚未:( 這裏是我的字符串:(你可以看到它有換行符)PHP的新手問題:正則表達式

Webname: [webname] 
Username: [username] 
IP:  [IP] 

我需要讀出方括號內的值 這裏是我的代碼:

$pattern = '/\[(.|\n)+?\]/'; // i've used the same syntax for my asp projects, always worked 
    preg_match($pattern, $txt, $matches, PREG_OFFSET_CAPTURE); 
    echo "matches:".count($matches)."\n\n"; 
    foreach ($matches as $match) 
    { 
     echo $match[0]."\n"; 
    } 

我得到只有2場比賽:[webname]e(???) 我與這擺弄了好幾個小時,現在並找不到什麼是wr ong ..

有什麼想法? 感謝

回答

4

看起來複雜得多,它必須是。換行符在這裏不起任何作用。

$pattern = '/\[(.+?)\]/'; 
preg_match_all($pattern, $txt, $matches); 

print_r($matches); 

Array 
(
    [0] => Array 
     (
      [0] => [webname] 
      [1] => [username] 
      [2] => [IP] 
     ) 

    [1] => Array 
     (
      [0] => webname 
      [1] => username 
      [2] => IP 
     ) 

) 

所以值將是$matches[1]。如果您想要包括括號($matches[0])在內的值,則也可以省略模式中的括號。

1

第一個捕獲組,你的情況只有一個,就是在$matches[1]

0

試着這麼做

$pattern = '/\[([^\]]+)\]/'; 

,並使用preg_match_all()來獲取所有的比賽。

0

試試這個

$values = array(); 

foreach (explode("\n", $text) as $line) { 
    if (preg_match('/([^:]++):[^\s]*+(.*+)/', $line, $match)) { 
     $values[$match[1]] = $match[2]; 
    } 
} 

var_dump($values); 
+0

你的意思'+?'?或者'++'應該是什麼意思? – 2011-03-31 08:23:52

+1

這是一個佔有量詞。沒有回溯,所以它比'+?'更快。你可以閱讀更多關於它[這裏](http://www.regular-expressions.info/possessive.html) – chriso 2011-03-31 08:37:09

+0

有趣的是,我不知道....但它似乎PHP不能很好地工作。例如。如果我用'+'交換'?',我就再也找不到匹配了。順便說一下,你的代碼缺少'''併產生一個空數組。至少在我的系統上....你測試了你的代碼嗎? – 2011-03-31 08:46:58