用于返回所有可能的连续单词分组的正则表达式

时间:2011-12-22 18:29:24

标签: php regex

对于给定的字符串“狐狸跳过兔子”,以下字符串被视为顺序字分组

狐狸跳过兔子, 狐狸跳过了, 狐狸跳了过来,
狐狸跳了,
狐狸,
狐狸跳过兔子,
狐狸跳过了, 狐狸跳了过来,
狐狸跳了,
跳过兔子,
u 跳了过来,
兔子, 在, 兔子

任何人都可以建议或提供合适的正则表达式。我尝试了几种

\b\w*\b\s+(\b\w*+\b\s?

但我似乎无法获得一个返回完整预期结果集的表达式。

此致 SOliver。

2 个答案:

答案 0 :(得分:2)

键盘:http://codepad.org/E4rywXD8

$s = "the fox jumped over the rabbit";
$s = split(' ', $s);
$result = array();
foreach ($s as $key => $word)
{
    $r = array();
    for ($i = $key; $i < count($s); $i++)
    {
        $r[] = $s[$i];
        if(count($r) > 1) $result[] = implode(' ', $r);
    }
}

答案 1 :(得分:1)

这是一个使用标准输入/输出的正则表达式的Ruby脚本:

@map = {}
def scan(str)
    if(str && str=~/\w+\s\w+/)
        @map[str] = nil
        scan(str.sub(/\s?\w+$/,""))
        scan(str.sub(/^\w+\s?/,""))
    end
end
scan(gets)
puts @map