2016-12-04 80 views
-1

我需要提取一些詞在一組字母,塊,如何找到一組特定的字母的字母在PHP

例如

「gkshgksguvjvjvvjgvjgvjgvgdkgu STACK ksbegkbeskbgksebgkbb 溢出 ghbhjjhvjvjvjvjgvgjvgjvgjvgjvjgvgjvgjvgjvjg STACK ksbbb OVERFLOW vjvvvgjvgvgjvgjvgjvgjvvsdkgfkdgdgfdsgkhsdgdgfdsgffsdhkg」

  1. 我想提取 「STACK ksbegkbeskbgksebgkbb OVERFLOW
    從上述文字,

  2. STACKOVERFLOW之間數量的字母可以變化。

  3. 如果有一個以上的satck S和溢出 S IN的一組 字母 ,我想找到他們所有插圖中那些 兩個單詞的字母,(並將它們添加到陣列)

    每次的字母STACK和OVERFLOW之間的數量是可以改變的

+0

可能重複的[學習正則表達式](http://stackoverflow.com/questions/4736/learning-regular-expressions) – Winter

+1

@Winter我需要在PHP的解決方案,而不僅僅是學習關於正則表達式 – theModerator713

回答

2
$theBlob = "abcSTACKmmmOVERFLOWxyz..."; 
preg_match_all('/STACK(.*)OVERFLOW/U', $theBlob, $matches); 
assert($matches[0][0] === 'STACKmmmOVERFLOW'); 
assert($matches[1][0] === 'mmm'); 

已修正:已添加U修飾符使.*非貪婪。

的正規快件/STACK(.*)OVERFLOW/UU修改,使.*非貪婪,這意味着它應該匹配字符的最小數量(如果沒有U.*將是貪婪和匹配一樣,因爲它可以(直至最後「溢出「)。

$matches將數組的數組。$matches[0]是所有全匹配的陣列。$matches[1]包含所有子部分的所述第一組括號的陣列。

參見http://phpfiddle.org/main/code/7cix-4y38

注意:U修改器使所有中繼器不貪心。如果你想混合貪婪和非貪婪,你可以做.*?來製造一個不貪婪的。上面的正則表達式將成爲/STACK(.*?)OVERFLOW/'

+0

哎呀,對不起,我忘了給正則表達式添加「不真實」。上面的答案已更正。 – BareNakedCoder

+0

非常感謝你!它真的有用:)我們需要更多像你這樣的人在這個星球上:) – theModerator713

+1

大聲笑...這不是我前妻說的:) – BareNakedCoder