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
基本上,我具有一些更復雜的正則表達式的命令的麻煩。我發現使用正則表達式的大部分代碼都非常簡單,但如果能夠使用它,我可以在很多地方使用它。你會看看我正在嘗試做的東西,看看你是否可以轉換任何東西?
- 在大括號「(」和「)」之間排列單詞或單詞。
- 將新單詞的第一個單詞排成一行,結束xor四個空格,然後是一個右大括號,「)」,以及一個空格和一個大括號「(」AND將文檔中的第一個單詞加到空格和開大括號「(」。
- 在帶分號的任何行上,排列以分號分隔的單詞。獲取最後一個分號後的單詞或單詞,但不會在換行符或四個連續空格後面輸入單詞。以字符串「tabulations:」開頭的字符串不應該包含在這個數組中,即使以字符串「tabulations:」開頭的行有分號,如果以緊密大括號結尾的新行,「)」出現在行之前包含分號,而不是以「製表」「開始」替代數組,而不是「數組」,而不是「012」。獲取冒號後面的單詞或單詞,並以字符串「舊樣式:」開頭的行上的換行符前面。如果以緊密大括號結尾的新行,「)」出現在「製表:」 - 起始行之前,請將「無舊樣式」添加到數組中。
- 與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上。
你應該主動向我們展示你到目前爲止的狀況,我們不會爲你編碼 – Howard 2011-12-29 15:32:41
@霍華德,我有各種各樣的不同類型的解決方案,但沒有一個是完整的,如果你想看到其中的一些,我不確定什麼是最好的方法來開始處理這個問題(甚至不確定是否應該使用正則表達式)。 't想給人們錯誤的想法 – 2011-12-29 15:36:58
+1,看看你有多遠,讓我們知道當你遇到一個你無法弄清楚的問題時,訓練經驗。 – Rijk 2011-12-29 16:02:33