2011-01-06 76 views
0

我有一個html文檔,我保存爲.txt文件。我想提取/ user /後面的每個字符串,並對所有提取的字符串進行逗號分隔列表。 因此,每當在這個txt文件中有一個「/ user/boy34」,我想提取「boy34」部分。我真的很陌生,但我一直在閱讀有關preg_match_all()函數,我認爲這就是我需要使用的。PHP-如何通過HTML文檔進行搜索並在php中提取某些字符串?

下面是我想出這麼遠,但它不工作:

<?php 
$str = file_get_contents("comment.txt"); 
preg_match_all ('/^(user\/)\/[A-Z0-9][A-Z0-9_-]+\"$/i', $str, $preg); 
print_r ($preg); 
?> 

我從這個得到的輸出是:

Array ([0] => Array () [1] => Array ()) 

有人可以幫我嗎?

回答

2

在正則表達式中使用^意味着只有當整行以您的主題開頭時纔會匹配。此外,末尾的$表示線路也必須在比賽結束後立即結束。所以你永遠不會找到任何東西,除非整條線只是/user/boy34。此外,您可能需要m標誌用於多行模式。

你也應該使用的快捷鍵,如\ W(字字符,A-Za-z0-9_

嘗試這個正則表達式:/"\/user\/(\w+)"/im

如果您發佈了HTML的一個例子,其實我可以測試了這一點併爲你提供一個可用的正則表達式模式。

--- UPDATE ---

我測試使用此HTML:

<html> 
    <body> 
    <a href="/user/boy30" /> 
    <a href="/user/boy31" /> 
    <a href="/user/boy32" /> 
    </body> 
</html> 

和正則表達式上面提到的,我得到了它在這個非常簡單的測試工作。我用這個網站測試:http://www.spaweditor.com/scripts/regex/index.php

這裏是我的結果:

Array 
(
    [0] => Array 
     (
      [0] => "/user/boy30" 
      [1] => "/user/boy31" 
      [2] => "/user/boy32" 
     ) 

    [1] => Array 
     (
      [0] => boy30 
      [1] => boy31 
      [2] => boy32 
     ) 

) 

---正則表達式的解釋---

  • /需要啓動任何正則表達式
  • "尋找雙引號字符
  • \/user\/搜索/用戶/(需要轉義的正斜槓)
  • (括號之間的任何內容都將在您的結果中組合在一起(留下括號不會破壞正則表達式,它仍然會找到匹配項,但是這個允許我們在前面提取「boy32」。)
    • \w+搜索1個或多個(+表示 「1以上」)字字符(相當於[a-zA-Z0-9_]
    • )完分組
  • "之前開始看起來爲另一個雙引號字符
  • /需要,在任何正則表達式模式的結尾,和之前的任何標誌
    • i國旗:不區分大小寫的模式
    • m標誌:多行模式(正常,換行符將終止表情,這使得模式甚至多行匹配)
+0

哇它的工作!謝謝!你能向我解釋你是怎麼想出這種模式的? – bambam 2011-01-06 22:55:11