В настоящее время я пытаюсь создать игру призрака, и это мой php-файл, который использует регулярное выражение для обновления строки в моем html-файле, в котором перечислены все буквы, которые могут быть сформируйте слово, следующее за строкой. (например, для liche, он будет эхо n для возможных букв). Кроме того, у меня есть текстовый файл со всеми словами в английском словаре, из которого я извлекаю данные для preg_match_all(). Однако мой код не возвращает ничего, и я не уверен, почему.Regex (PHP) для поиска всех совпадений, начинающихся с строки набора
Цикл for специфичен для призрака игры. Правила игры предназначены для каждого игрока, чтобы сказать письмо с целью формирования слова. Однако тот, кто произносит последнюю букву, которая образует слово, выигрывает. Например, если человек 1 говорит Z, человек 2 говорит E, p1 говорит B, p2 говорит R, то p1 будет проигрывать, потому что единственная возможная буква слева - это A, которая сформирует полное слово. Однако правило, которое заставило меня создать это для цикла, заключалось в том, чтобы исключить все слова длиной до 3 слов (a, a, cat и т. Д.)
Если бы я должен был ввести строку loa (полученную REQUEST), то все слова в файле wordsEn.txt, который начался с loa, будут добавлены в массив. Оттуда следующая буква после loa будет добавлена к строке s1 (при этом повторяющиеся буквы не повторяются, n не следует повторять дважды для кредитов и займов). Lasty, это будет echo 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);
}
>
Добро пожаловать в SO! Надеюсь, вы найдете сайт полезным. По моему опыту, обучение использованию сайта также помогло мне лично вырасти как разработчик. Это отличное начало задавать хороший вопрос. У вас есть представление о том, чего вы хотите достичь, и это имеет смысл интуитивно, однако в нем отсутствует пример того, что вы пробовали вместе с результатами, которые вы наблюдали, и желаемым результатом.Пожалуйста, подумайте над тем, чтобы добавить их, чтобы другие пользователи могли протестировать ваш код и предоставить вам код, который вам полезен. – Bobby
Спасибо! Я добавил дополнительные сведения о проекте, над которым я работаю, и надеюсь, что это сделает его более понятным для других. – mlin
В вашем коде есть ошибки. Конкатенация строк выполняется через '.' not' + '; '$ matches' является многомерным, поэтому' $ matches [n] '- это массив, а не строка; почему вы делаете '$ n = $ length + 4;'? Я уверен, что '$ next = $ matches [$ n] + '';' не делает то, что вы думаете ........ – Toto