2016-11-05 121 views
1

我目前正在嘗試製作一個ghost遊戲,這是我的php文件,它使用正則表達式更新我的html文件中的一個字符串,該字符串列出了所有可能的字母在字符串後面形成一個單詞。 (就像liche一樣,它會回顯n表示可能的字母)另外,我有一個文本文件,其中包含英文字典中所有單詞,我從preg_match_all()中提取數據。但是,我的代碼一直沒有返回,我不知道爲什麼。查找以字符串開頭的所有併發的正則表達式(PHP)

for循環特定於遊戲幽靈。遊戲的規則是讓每個玩家說出一封信,其目的是形成一個字。然而,誰說形成這個詞的最後一封信贏了。例如,如果第1個人說的是Z,第2個人說的是E,第1個說的是B,第2個說的是R,那麼p1就會丟失,因爲剩下的唯一可能的字母是A,它會形成一個完整的單詞。然而,使我創建這個for循環的規則是排除長度小於3個字的所有單詞(a,the,cat等)。

如果我要輸入字符串loa REQUEST),那麼以loa開頭的WordsEn.txt文件中的所有單詞都將被添加到數組中。從那裏開始,loa之後的下一個字母將被添加到字符串s1(儘管沒有重複的字母;對於貸款和貸款,n不應該重複兩次)。最後,這會回顯s1,稍後會在html中使用。

<?php 
$contents=file_get_contents('wordsEn.txt'); 
    $a=$_REQUEST['word'];//gets current combo from the url 
    $pattern='/^'+$a+'.*/'; 
    $length=strlen($a); 
    $letters=''; 
    if(preg_match_all($pattern,$contents,$matches)){ 
     for($n=0; $n<count($matches); $n++){ 
      if($length>3 and $matches[$n]==$a){// if it is a word with length over 3 
       $n=$length+4; 
       $letters='';//no matches 
      } 
      else{ 
       $next=$matches[$n]+''; 
       $temp=substr($next, $length-1, $length); //get the next letter 
       if(strpos($letters, $temp)==FALSE){ 
        $temp=substr($next, $length-1, $length); 
        $letters+=$temp; 
       } 
      } 
     } 
     echo($letters); 
    } 

>

+0

歡迎來到SO!我希望你會發現這個網站很有用。根據我的經驗,學習使用該網站也有助於我個人成長爲一名開發人員。這是一個很好的問題開始。你對你想達到什麼有一個想法,它很直觀,但是它缺少一個你已經與你觀察到的輸出和期望的輸出一起嘗試的例子。請考慮添加這些內容,以便其他用戶可以測試您的代碼並向您提供代碼,作爲對您有用的代碼。 – Bobby

+0

謝謝!我在我正在研究的項目中添加了更多細節,希望這會讓其他人更清楚。 – mlin

+0

你的代碼有錯誤,字符串連接是通過'.'而不是'+'完成的。 '$ matches'是多維的,所以'$ matches [n]'是一個數組,而不是一個字符串;你爲什麼要做'n = $ length + 4;'?我非常肯定'$ next = $ matches [$ n] +'';'不會做你認爲的........ – Toto

回答

1

這只是簡單:

^pa.* 

其中:根據問題再形成

^ : is an anchor that means begining of string 
pa : literally letter "p" followed by letter "a" 
.* : any character (.) present 0 or more times (*) 

編輯:

你尋找熱塑成型的模式因爲是:

$pattern = "/^$a.*/"; 

,或者更嚴格:

$pattern = "/^$a\w*/"; 

我不明白的for循環的目的,請解釋一下你想要做什麼,並添加你的問題的一些示例輸入字符串的預期結果。

+0

for循環是特定於遊戲幽靈。遊戲的規則是讓每個玩家說出一封信,其目的是形成一個字。然而,誰說形成這個詞的最後一封信贏了。例如,如果第1個人說的是Z,第2個人說的是E,第1個說的是B,第2個說的是R,那麼p1就會丟失,因爲剩下的唯一可能的字母是A,它會形成一個完整的單詞。但是,使我創建for循環的規則是排除長度不超過3個單詞的所有單詞(a,an,cat等)。 – mlin

+0

如果我要輸入字符串loa(由REQUEST檢索),那麼以loa開頭的WordsEn.txt文件中的所有單詞都將被添加到數組中。從那裏開始,loa之後的下一個字母將被添加到字符串s1(儘管沒有重複的字母;對於貸款和貸款,n不應該重複兩次)。最後,這會回顯s1,稍後會在html中使用。 – mlin

+0

@mlin:我不明白你爲什麼從'0'循環到'strlen($ a)',並將這個指令用於數組'$ matches',這沒什麼意義 – Toto

相關問題