2015-11-02 113 views
1

我有一個名爲$content的變量,它包含一個DokuWiki Markdown文件的內容。PHP preg_match_all()匹配太多

我想匹配所有在樣式的鏈接:[[http://url.com/|title]]

這裏是可變我想對陣的一部分:

[[http://help.eclipse.org/luna/index.jsp?topic=%2Forg.eclipse.platform.doc.user%2FgettingStarted%2Fqs-37-3c.htm|Eclipse]], [[https://msdn.microsoft.com/en-us/library/xc3ed5eh%28v=vs.90%29.aspx|Visual Studio]] and [[https://www.jetbrains.com/idea/help/managing-bookmarks.html|IntelliJ Idea]] 

我現在的正則表達式是:/\[\[(.*)\|([\w\s]+?)\]\](?=\,|\s)/ ,但它匹配我上面列出的整個部分,包括,and

每個分離出來的鏈接,我要的是,所以我從preg_match_all('/regular_expression/', $content, $links);尋找的結果是:

$links[0][0] = [[http://help.eclipse.org/luna/index.jsp?topic=%2Forg.eclipse.platform.doc.user%2FgettingStarted%2Fqs-37-3c.htm|Eclipse]] 
$links[0][1] = [[https://msdn.microsoft.com/en-us/library/xc3ed5eh%28v=vs.90%29.aspx|Visual Studio]] 
$links[0][2] = [[https://www.jetbrains.com/idea/help/managing-bookmarks.html|IntelliJ Idea]] 

$links[1][0] = http://help.eclipse.org/luna/index.jsp?topic=%2Forg.eclipse.platform.doc.user%2FgettingStarted%2Fqs-37-3c.htm 
$links[1][1] = https://msdn.microsoft.com/en-us/library/xc3ed5eh%28v=vs.90%29.aspx 
$links[1][2] = https://www.jetbrains.com/idea/help/managing-bookmarks.html 

$links[2][0] = Eclipse 
$links[2][1] = Visual Studio 
$links[2][2] = IntelliJ Idea 
+0

改變:'(。*)'(這太貪心和不精確)爲:'([^ | \ [ \]] *)'。 – ridgerunner

+0

問題或答案? – chris85

+0

不,我明白你改變了什麼,我實現了它,它運作良好。非常感謝你! – slichlyter12

回答

0

我想這是你所追求的:

$string = '[[http://help.eclipse.org/luna/index.jsp?topic=%2Forg.eclipse.platform.doc.user%2FgettingStarted%2Fqs-37-3c.htm|Eclipse]], [[https://msdn.microsoft.com/en-us/library/xc3ed5eh%28v=vs.90%29.aspx|Visual Studio]] and [[https://www.jetbrains.com/idea/help/managing-bookmarks.html|IntelliJ Idea]]'; 
preg_match_all('/\[{2}(.+?)\|([\w\s]+?)\]{2}/', $string, $links); 
print_r($links); 

輸出:

Array 
(
    [0] => Array 
     (
      [0] => [[http://help.eclipse.org/luna/index.jsp?topic=%2Forg.eclipse.platform.doc.user%2FgettingStarted%2Fqs-37-3c.htm|Eclipse]] 
      [1] => [[https://msdn.microsoft.com/en-us/library/xc3ed5eh%28v=vs.90%29.aspx|Visual Studio]] 
      [2] => [[https://www.jetbrains.com/idea/help/managing-bookmarks.html|IntelliJ Idea]] 
     ) 

    [1] => Array 
     (
      [0] => http://help.eclipse.org/luna/index.jsp?topic=%2Forg.eclipse.platform.doc.user%2FgettingStarted%2Fqs-37-3c.htm 
      [1] => https://msdn.microsoft.com/en-us/library/xc3ed5eh%28v=vs.90%29.aspx 
      [2] => https://www.jetbrains.com/idea/help/managing-bookmarks.html 
     ) 

    [2] => Array 
     (
      [0] => Eclipse 
      [1] => Visual Studio 
      [2] => IntelliJ Idea 
     ) 

) 

Regex101演示:https://regex101.com/r/iM4kG3/1

只需要您的*爲非貪婪?並且您可能在此之前想要的東西|因此請使量詞a +(一個或多個);如果你不在乎是否有任何東西......