从缺少字母的单词中查找txt列表中的单词

时间:2018-11-26 17:25:11

标签: php string char

到目前为止,仍在搜索如何执行此操作,但没有成功。 我已经完成了一个脚本,可以在仅包含一次字母的列表中查找单词。可以。

现在,我想制作一个脚本来查找txt文件列表中的单词,例如这样的单词:W ??? EB ?? RD?。每个字母的位置都很重要。我只需要找到适合的词即可。缺少的字母是?。

有人可以帮我吗?

到目前为止已完成:

    $letters = "[A-Z]HITEBOARDS";
$array = explode("\n", file_get_contents('test.txt'));

$fl_array = preg_grep("[A-Z]HITEBOARDS", $array);

echo $array[0];
echo $array[1];
echo $array[2];
echo $array[3];
var_dump($fl_array);

1 个答案:

答案 0 :(得分:0)

正如我在评论中提到的,您的正则表达式缺少分行符

$fl_array = preg_grep("[A-Z]HITEBOARDS", $array);

应该是

$fl_array = preg_grep("/[A-Z]HITEBOARDS/", $array);

您可以或应该在单词前后添加单词边界\b,这将防止匹配部分单词,例如(例如)如果您有可以匹配{{1}的/\b[A-Z]here\b/ },而不只是therefore。没有边界,匹配可能会出现在分词的开头,中间或结尾,这可能不是您想要的。边界将匹配there或换句话说不是\W或更简单的\w或英语的任何内容:匹配任何不包含字母,数字或下划线的内容,基本上是所有标点符号,特殊字符([^a-z0-9_]除外)和空格。

因此,将其放在代码中将是这样:

_

也可以代替

 $fl_array = preg_grep("/\b[A-Z]HITEBOARDS\b/", $array);

您可以使用

$array = explode("\n", file_get_contents('test.txt'));

首选$array = file('test.txt', FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES); 函数是因为它根据行尾将文件分成一个数组(爆炸不依赖于操作系统file\r\n)。除了更好的性能,它还有两个非常有用的标志。 \n是给定的,因为它删除了通常由FILE_IGNORE_NEW_LINES保留在数组中的行尾。 file()基本上会按照说的去做,并跳过空的行。

干杯。