正则表达式(PHP),用于查找以集合字符串开头的所有并发

正则表达式(PHP),用于查找以集合字符串开头的所有并发,php,regex,preg-match-all,Php,Regex,Preg Match All,我目前正在尝试制作一个ghost游戏,这是我的php文件,它使用正则表达式更新html文件中的字符串,该文件列出了所有可能在字符串后面形成单词的字母。(和liche一样,它会对可能的字母回显n)此外,我有一个文本文件,其中包含我正在为preg_match_all()提取数据的英语词典中的所有单词。然而,我的代码总是不返回任何内容,我不知道为什么 for循环是特定于游戏ghost的。游戏规则是每个玩家为了组成一个单词而说出一个字母。然而,谁说出构成单词的最后一个字母,谁就赢了。例如,如果人1说Z,

我目前正在尝试制作一个ghost游戏,这是我的php文件,它使用正则表达式更新html文件中的字符串,该文件列出了所有可能在字符串后面形成单词的字母。(和liche一样,它会对可能的字母回显n)此外,我有一个文本文件,其中包含我正在为preg_match_all()提取数据的英语词典中的所有单词。然而,我的代码总是不返回任何内容,我不知道为什么


for循环是特定于游戏ghost的。游戏规则是每个玩家为了组成一个单词而说出一个字母。然而,谁说出构成单词的最后一个字母,谁就赢了。例如,如果人1说Z,人2说E,p1说B,p2说R,那么p1将丢失,因为剩下的唯一可能的字母是A,它将构成一个完整的单词。然而,让我创建这个for循环的规则是排除长度小于3个单词(a、an、the、cat等)的所有单词


如果输入字符串loa(通过请求检索),那么wordsEn.txt文件中以loa开头的所有单词都将添加到数组中。从这里开始,loa后面的下一个字母将添加到字符串s1中(尽管没有重复的字母;对于loan和loans,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);
    }

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

(pa)[a-zA-Z0-9]+
这里有一个演示:

在php中,您可以这样实现

演示:

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

(pa)[a-zA-Z0-9]+
这里有一个演示:

在php中,您可以这样实现


演示:

它非常简单:

^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循环的目的,请解释一下您想要做什么,并在问题中添加一些示例输入字符串作为预期结果


这很简单:

^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循环的目的,请解释一下您想要做什么,并在问题中添加一些示例输入字符串作为预期结果


欢迎来到SO!我希望你会发现这个网站很有用。根据我的经验,学习使用网站也帮助我个人成长为一名开发者。这是问一个好问题的好开始。你对你想要达到的目标有一个想法,这在直觉上是有意义的,但是它缺少了一个你已经尝试过的例子,以及你观察到的输出和期望的输出。请考虑添加这些,这样其他用户可以测试您的代码并为您提供有用的代码,谢谢!我已经为我正在进行的项目添加了更多细节,希望这能让其他人更清楚。您的代码中有错误,字符串连接是通过
而不是
+
完成的
$matches
是多维的,因此
$matches[n]
是数组,而不是字符串;你为什么要做
$n=$length+4?我很确定
$next=$匹配[$n]+''不做你想做的事…….欢迎来到SO!我希望你会发现这个网站很有用。根据我的经验,学习使用网站也帮助我个人成长为一名开发者。这是问一个好问题的好开始。你对你想要达到的目标有一个想法,这在直觉上是有意义的,但是它缺少了一个你已经尝试过的例子,以及你观察到的输出和期望的输出。请考虑添加这些,这样其他用户可以测试您的代码并为您提供有用的代码,谢谢!我已经为我正在进行的项目添加了更多细节,希望这能让其他人更清楚。您的代码中有错误,字符串连接是通过
而不是
+
完成的
$matches
是多维的,因此
$matches[n]
是数组,而不是字符串;你为什么要做
$n=$length+4?我很确定
$next=$匹配[$n]+''不符合你的想法……你能看看我的新问题吗?我让它更具体,并提供了更多的代码。我有一个变量$a,我想用它作为字符串(我使用的是一个变量,因为它总是在变化)来开始一个单词。看看这个代码,然后告诉我你想要什么如果给一个字符串$a和一个充满单词的文档,你会在preg_match_all(模式、内容、数组)中放入什么正则表达式为了将以字符串a开头的所有单词(不管后面是什么)存储到数组中?(我希望这更有意义)使用$arr=array();阵列推送($arr,$a);你能看看我的新问题吗?我让它更具体,并提供了更多的代码。我有一个变量$a,我想用它作为字符串(我使用的是一个变量,因为它总是在变化)来开始一个单词。看看这个代码,然后告诉我你想要什么如果给一个字符串$a和一个充满单词的文档,你会在preg_match_all(模式、内容、数组)中放入什么正则表达式为了将以字符串a开头的所有单词(不管后面是什么)存储到数组中?(我希望这更有意义)使用$arr=array();阵列推送($arr,$a);for循环是特定于游戏ghost的。游戏规则是每个玩家为了组成一个单词而说出一个字母。然而,谁说出构成单词的最后一个字母,谁就赢了。例如,如果人1说Z,人2说E,p1说B,p2说R,那么p1将丢失,因为剩下的唯一可能的字母是A,它将构成一个完整的单词。然而,让我创建这个for循环的规则是排除长度小于3个单词(a、an、the、cat等)的所有单词。如果我要输入字符串loa(通过请求检索),那么所有单词I