2012-04-13 73 views
17

我已經閱讀了正則表達式的多個教程,但它不會堅持在我的腦海。我永遠無法讓我的模式工作。希望有人能幫忙。PHP找到字符串與正則表達式

我有一個PHP變量($內容),我需要找到一個特定的模式,看起來像這樣

[展廳::名稱/ /的/文件夾/]

我想搜索:

- starting with "[gallery::" 
- any other character (variable length) 
- ending with "]" 

到目前爲止,在PHP中我有:

preg_match('/\[gallery\:/', $content, $matches, PREG_OFFSET_CAPTURE); 

我可以找到[圖庫:但僅此而已。 我希望能夠找到其餘的(:名稱/的/的/文件夾/])

任何幫助表示讚賞! 謝謝!

回答

26

儘量捕捉它:

preg_match("/\[gallery::(.*?)]/",$content,$m); 

現在$m是一個數組:

0 => [gallery::/name/of/the/folder/] 
1 => /name/of/the/folder/ 
+0

如果該字符串的東西「與開始」,一定要在前面加上「^」字符「\\畫廊」 – AndrewPK 2012-04-13 14:29:55

+0

不會多次出現([圖庫:: /名/的/的/文件夾/] [gallery ::/name/of/the/folder /])會導致在所有字符上使用貪婪捕獲的問題? – 2012-04-13 14:30:46

+0

這將匹配'[gallery ::]'我會將其改爲'[gallery ::(。+?)]' – nathanjosiah 2012-04-13 14:30:46

2

改變你的正則表達式來

'/\[gallery::([A-Za-z\/]+)\]/' 

自從我把文件夾/路徑部分在括號中,你應該得到一個捕獲組。

+0

需要另一個':',它不需要轉義,如果你需要匹配'/',你應該使用另一個分隔符,比如'#' – DaveRandom 2012-04-13 14:29:31

+0

'[A-Za-z]'只匹配一個字符,但它不符合「所有字符」 - 當然不是文件名中允許的。 – 2012-04-13 14:32:44

+0

@Kolink,注意父元素後面的+號 – 2012-04-13 14:34:19

0
if (preg_match("/\bweb\b/i", "PHP is the web scripting language of choice.")) { 
    echo "A match was found."; 
} else { 
    echo "A match was not found."; 
}