2011-12-22 65 views
3

對於給定的字符串「狐狸在兔子蹦」下面的字符串被認爲是連續的單詞分組正則表達式返回所有可能的順序單詞分組

狐狸跳過了兔子,
狐狸跳過了,
狐狸躍過,
狐狸跳下,
狐狸,
狐狸跳過了兔,
狐狸躍過,
狐狸躍過,
狐狸跳下,
跳過了兔子,
umped過,
躍過,
在兔,
過,
兔子

任何人都可以提示或提供一個適當的正則表達式。我已經試過的

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

一些變化,但我似乎無法得到它返回完整預期的結果集的表達式。

Regards, SOliver。

+4

也許'Regex'是不是在這裏最好的選擇。 – ediblecode 2011-12-22 18:32:30

+3

這不是一個正則表達式。通常一旦正則表達式在字符串中找到匹配,它就會繼續匹配所有事件。它會一遍又一遍地匹配同一個詞。 – 2011-12-22 18:36:02

+0

我認爲這可能是一個懶惰的人,感謝及時的回覆。 – CBusBus 2011-12-22 18:41:55

回答

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); 
    } 
} 
+0

這很美麗,謝謝。我不記得我爲什麼問這個問題,但我很高興我做到了。 – CBusBus 2012-01-18 11:37:12

+0

謝謝,你真好! :) – PiTheNumber 2012-01-18 12:43:04

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