2011-12-29 57 views
1

Pro正則表達式轉換這些不可能的正則表達式的例子?輸入的

vulture (wing) 
tabulations: one leg; two legs; flying 
father; master; patriarch  
mat (box) 
pedistal; blockade; pilar 
animal belly (oval) 
old style: naval 
jackal's belly; jester slope of hill (arch) 
key; visible; enlightened 

基本上,我具有一些更復雜的正則表達式的命令的麻煩。我發現使用正則表達式的大部分代碼都非常簡單,但如果能夠使用它,我可以在很多地方使用它。你會看看我正在嘗試做的東西,看看你是否可以轉換任何東西?

  1. 在大括號「(」和「)」之間排列單詞或單詞。
  2. 將新單詞的第一個單詞排成一行,結束xor四個空格,然後是一個右大括號,「)」,以及一個空格和一個大括號「(」AND將文檔中的第一個單詞加到空格和開大括號「(」。
  3. 在帶分號的任何行上,排列以分號分隔的單詞。獲取最後一個分號後的單詞或單詞,但不會在換行符或四個連續空格後面輸入單詞。以字符串「tabulations:」開頭的字符串不應該包含在這個數組中,即使以字符串「tabulations:」開頭的行有分號,如果以緊密大括號結尾的新行,「)」出現在行之前包含分號,而不是以「製表」「開始」替代數組,而不是「數組」,而不是「012」。獲取冒號後面的單詞或單詞,並以字符串「舊樣式:」開頭的行上的換行符前面。如果以緊密大括號結尾的新行,「)」出現在「製表:」 - 起始行之前,請將「無舊樣式」添加到數組中。
  4. 與3相同,只是以字符串「製表:」開頭的行除外。如果以緊密大括號結尾的新行,「)」出現在「製表:」 - 起始行之前,請將「無製表符」添加到數組中,取而代之。

我試圖找出如何通過PHP做到這一點,但我會很高興,如果任何人都可以現場用任何語言這些要求,特別是PHP,C++,JavaScript或批次。我也知道這些都很難表現出來,即使對於一個謎題愛好者也是如此。所以,我承諾100分獎勵積分可用於任何完整的答案。

CNC中

首先溶液我正在

好了,所以我工作在第一解決方案是解決3.我試圖在分號破線,並且我然後希望能夠逐行抓取數據並進一步編輯。

$input = file_get_contents('explode.txt'); 
foreach(explode("\n", $input) as $line){ 
    $words = explode(';', $line); 
    foreach($words as $word){ 
    echo $word; 
    } 
} 

基本上,望着輸出,數據以相同的格式它已經結束了,只是減去了分號。這不是很有用,我決定停下來。我對

該工作

第二種解決方案是基於圍繞這行代碼:preg_match_all('/\;([^;]+)\}/', $myFile, $matches)

現在有一個工作解決問題的第一部分,thanks to EPB and fge

$myFile = file_get_contents('fakexample.txt'); 
function get_between($startString, $endString, $myFile){ 
    //Escape start and end strings. 
    $startStringSafe = preg_quote($startString, '/'); 
    $endStringSafe = preg_quote($endString, '/'); 
    //non-greedy match any character between start and end strings. 
    //s modifier should make it also match newlines. 
    preg_match_all("/$startStringSafe(.*?)$endStringSafe/s", $myFile, $matches); 
    return $matches; 
} 
$list = get_between("(", ")", $myFile); 
foreach($list[1] as $list){ 
    echo $list."\n"; 
} 

一些問題,我所做的是我沒有正確使用正則表達式。我認爲ArrayArray返回的問題是因爲我沒有封裝preg_match_all函數,因此它返回$匹配到私有函數。我仍然不確定。我還不確定是否應該使用file_get_contents()函數來讀取文件。

第三種解決方案嘗試

所以,我有我怎麼想接近這個最初的想法,我決定去做我自己的路。再次,我從問題1開始,因爲它看起來最簡單。它有最少的例外

function find_between($input,$start,$end) { 
    if (strpos($input,$start) === false || strpos($input,$end) === false) { 
    return false; 
    } else { 
    $start_position = strpos($input,$start)+strlen($start); 
    $end_position = strpos($input,$end); 
    return substr($input,$start_position,$end_position-$start_position); 
    } 
} 

$myFile = file_get_contents('explode.txt'); 

$output = find_between($myFile,'(',')'); 

echo $output; 

據我所知,這將工作。我遇到的問題是遞歸。我試過foreach($output as $output){echo $output;},但是這給了我一個錯誤。對我來說這似乎很明顯,這是因爲我沒有遞歸,所以沒有數組。我停下來的原因是因爲幾位程序員告訴我註定我失敗了。所以,我現在正在回到解決方案2上。

+3

你應該主動向我們展示你到目前爲止的狀況,我們不會爲你編碼 – Howard 2011-12-29 15:32:41

+0

@霍華德,我有各種各樣的不同類型的解決方案,但沒有一個是完整的,如果你想看到其中的一些,我不確定什麼是最好的方法來開始處理這個問題(甚至不確定是否應該使用正則表達式)。 't想給人們錯誤的想法 – 2011-12-29 15:36:58

+1

+1,看看你有多遠,讓我們知道當你遇到一個你無法弄清楚的問題時,訓練經驗。 – Rijk 2011-12-29 16:02:33

回答

1

這是做家庭作業嗎?這些說明(1-5)對我來說沒有任何意義,只要你有理由在學術追求之外完成任何這些說明。它似乎也不僅僅是新的正則表達式,還有一般的PHP。正如@霍華德指出的那樣,我們不會爲你做你的工作。

除此之外,如果你需要幫助瓦特/正則表達式,我會非常樂意協助;然而,這似乎並不是你最需要幫助的。

所以這是我可以爲您提供,關於你的問題:

3)「關於用分號任何線路,陣列IZE其用分號隔開的話
獲取的字或詞 - > Easy:以換行符(\ n)分解

以字符串「製表符:」開頭的行中的單詞不應包括在這個數組,即使以字符串「tabulations:」開頭的行有分號 - >這有點棘手,首先,分號用正則表達式,但不用冒號,這很可能必須由兩個se parate正則表達式:第一個「製表:」,如果沒有找到,則搜索分號。如果這個正則表達式成功,那麼你可以用分號爆炸,現在你已經獲得了所有的數據來創建所有的數組。

如果以緊密大括號結尾的新行,「)」出現在包含分號的行之前,而不是以「製表」開始,則「不交替」數組,而是「。」 - >這一個我要留給你要弄清楚,出於以下幾個原因:;-)

+0

你應該把所有這些討厭的東西放在註釋中(或在窗口外面)。因爲如果你使用大量的元語言,人們不會評價你的答案。 我已經在現場使用了所有這些。當我寫這些問題時,我對新的正則表達式很陌生,但我一直在努力去編寫它們。我使用了一個非現場論壇來得到答案,因爲這裏的答案沒有出現。在寫出問題之前,我對計劃中的每個表達式都有特定用途。 – 2014-02-18 22:11:33

相關問題