2016-12-04 50 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

相关问题