正则表达式(PHP)查找以set字符串开头的所有并发

时间:2016-11-05 09:22:25

标签: php regex preg-match-all

我正在尝试制作鬼游戏,这是我的php文件,它使用正则表达式来更新我的html文件中的字符串,该字符串列出了可能在字符串后面形成单词的所有字母。 (就像liche一样,它会为可能的字母回显n)另外,我有一个文本文件,其中包含英语词典中的所有单词,我从preg_match_all()中提取数据。但是,我的代码一直没有返回,我不确定原因。

for循环特定于游戏幽灵。游戏规则是每个玩家说出一个字母,目的是形成一个单词。但是,无论谁说出形成这个词的最后一个字母都会赢。例如,如果第1个人说Z,第2个人说E,p1说B,p2说R,那么p1会丢失,因为剩下的唯一可能的字母是A,这将构成一个完整的单词。但是,让我创建for循环的规则是排除长度不超过3个单词的所有单词(a,a,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);
    }

&GT;

2 个答案:

答案 0 :(得分:1)

你可以试试这个正则表达式

(pa)[a-zA-Z0-9]+

这是一个演示:

https://regex101.com/r/pUeIvw/1

在php中你可以像这样实现

样本:http://phpio.net/s/d37

答案 1 :(得分: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循环的目的,请解释你想要做什么,并在你的问题中添加一些预期结果的样本输入字符串。