2015-11-05 54 views
1

所以我知道如何從一個PHP字符串中提取文本時,它清晰地由兩個不同的字符(即[ABC])分隔內相同的兩個角色之間找到的文字...一個PHP串

然而,我現在面臨一個問題,我需要提取位於同一個字符('/')的兩個實例之間的文本。更棘手的是,這可能會在同一個字符串中發生多次。

一個例子可以說明清楚:

"This is /a/ silly ex/amp/le of what I /me/an." 

在這種情況下,我想抓住'a', 'amp' and 'me'

這些例子顯示了我可能遇到的各種情況(不同的長度和情況,我沒有抓住整個單詞而是一個單詞中的字母)。

我已經試過:

('/(\/.+?)+(\/)/i') 

但這一如預期,抓住了第一個和最後斜線之間的一切。理想將是一種方法來匹配,直到NEXT出現的斜線,而不是最後一個...

我一直在使用谷歌搜索相當一段時間,但我只想出兩個不同的分隔符。

+1

只是一個提示,你不必使用'/'作爲分隔符。當你的搜索模式包含'/'時,它可以提高可讀性以使用不同的字符並避免轉義:'#/。+?/#' – miken32

+0

@ miken32啊,是的,好點。我以前用過這個(具有諷刺意味的是,對於更短的正則表達式),但沒有想到在這裏使用它。 – asg

回答

1

您可以使用preg_match_all獲得多個匹配。

$string = 'This is /a/ silly ex/ampl/e of what/ I me/an'; 
$regex = '/\/.+?\//'; 
preg_match_all($regex, $string, $matches); 

print_r($matches); 


Array 
(
    [0] => Array 
    (
     [0] => /a/ 
     [1] => /ampl/ 
     [2] =>/I me/ 
    ) 
) 
+0

謝謝,凱文!這個伎倆。我接受你的答案。 – asg

0

試試這個:

(\/)(.*?)\1 

什麼是(\/)內將成爲您的匹配內容。例如,一組*之間的匹配應該是這樣的:

(\*)(.*?)\1 

Regex101