Php 使用preg_match搜索包含特定字母的单词正确吗?

Php 使用preg_match搜索包含特定字母的单词正确吗?,php,preg-match,preg-match-all,Php,Preg Match,Preg Match All,我有一组字母,例如: $word='estroaroint'; 可以将其安排为如下词语: - store - train - restoration - ...etc 它们可以在我的文件列表“dictionary.txt”中找到 一封信只能用一次 如何编写一个能够执行该操作的php脚本?我会尝试使用以下函数来管理它:strpbrk()使用正则表达式一步完成这项工作是不可能的。但是,可以分两步进行: 第一步是在字典中找到所有只包含字母的单词 第二步过滤重复字母的单词 示例(仅适用于asci

我有一组字母,例如:

$word='estroaroint';
可以将其安排为如下词语:

- store
- train
- restoration
- ...etc
它们可以在我的文件列表“dictionary.txt”中找到

一封信只能用一次


如何编写一个能够执行该操作的php脚本?

我会尝试使用以下函数来管理它:
strpbrk()
使用正则表达式一步完成这项工作是不可能的。但是,可以分两步进行:

  • 第一步是在字典中找到所有只包含字母的单词
  • 第二步过滤重复字母的单词
示例(仅适用于ascii范围):

PHP链接:-


注意:要将此脚本扩展到多字节字符,您需要编写自己的函数
mb_count_chars
(因为此函数不存在),用于拆分多字节字符串(您可以使用例如
mb_substr
mb_strlen
和循环,或者
preg_split
(?=)~u
PREG\u SPLIT\u NO\u EMPTY
选项)。您还需要将
u
修饰符添加到正则表达式模式,并将
strlen
更改为其多字节等效项。

谢谢您的回答。但你能给我举个例子吗?
$pattern = '~\b[' . $word . ']{1,' . strlen($word) . '}+\b~';

if (preg_match_all($pattern, $dictionary, $m)) {
    $chars = count_chars ($word, 1);
    $result = array_filter($m[0], function ($i) use ($chars) {
        foreach (count_chars($i, 1) as $k=>$v) {
            if ($v > $chars[$k]) return false;
        }
        return true;
    });

    print_r($result);
}