Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 用于包含特定字符且具有特定长度的字符串的正则表达式_Regex - Fatal编程技术网

Regex 用于包含特定字符且具有特定长度的字符串的正则表达式

Regex 用于包含特定字符且具有特定长度的字符串的正则表达式,regex,Regex,我正在寻找一种方法来写一个算法来解决字母沙拉。例如,如果我有这些信 ZDFOG 还要知道我搜索的单词有3个字符长,如果我只能使用每个字符一次,哪些单词匹配 让我们假设我有一本常用词词典 因此,RegXx应该与 狗 狗 雾 雾 上帝 上帝 但不应与字符串匹配,如它们是字典的一部分,因为每个字母应包含一次: ffo 斗 Ggg 那么,有没有一种优雅的方法来查找字典中包含特定字符且具有特定长度的所有单词呢?目前还不清楚 如果你的字典是常用词,为什么要出现ffo-doo-Ggg 我认为你最好用C程序来得

我正在寻找一种方法来写一个算法来解决字母沙拉。例如,如果我有这些信

ZDFOG

还要知道我搜索的单词有3个字符长,如果我只能使用每个字符一次,哪些单词匹配

让我们假设我有一本常用词词典

因此,RegXx应该与

狗 狗 雾 雾 上帝 上帝

但不应与字符串匹配,如它们是字典的一部分,因为每个字母应包含一次:

ffo 斗 Ggg

那么,有没有一种优雅的方法来查找字典中包含特定字符且具有特定长度的所有单词呢?

目前还不清楚

如果你的字典是常用词,为什么要出现
ffo-doo-Ggg

我认为你最好用C程序来得到你想要的东西。Regex不是一种算法语言

无论如何,这就是你想要的:
\b(([A-Za-z])((?!\2[A-Za-z])((?!\2[A-Za-z]))(((?!\2[A-Za-z]))\b

它只捕捉你想要的3个不同的字母和单词

证明:


但是你需要知道这种技术可能很慢。

如果不考虑重复的字母,例如
egg
,解决方案很简单;对每个字母使用锚定前瞻:

^(?=.*F)(?=.*O)(?=.*G).*
如果是复制品,就有点难看了:

^(?=.*E)(?=.*G.*G).*
您可以使用以下通用解决方案:

^(?=(.*E){1})(?=(.*G){2}).*

其中,重复次数
{n}
是目标单词字母的出现次数。360

如果你发布一些输入句子,那就好了,搜索词和预期匹配我已经更新了我的问题thankslets假设这些词在字典中。在这种情况下,聪明的for循环会比RegEx更快吗?取决于你的字典是如何实现的。每行一个单词,每行一个单词用空格隔开,这是语言,perl,c,python,ruby。你可以尝试使用这个正则表达式,如果你觉得它太慢,可以用你自己的程序来做。所以我必须创建所有要查找的组合,因为一开始给出的字母比解决方案中的字母多?就像我例子中的字母Z一样。@king no.头的顺序是不相关的。您需要为每个不同的字母创建一个具有正确数量的前瞻。例如,要搜索“EGG”,正则表达式
^(?=(.*G){2})(?=.*E)。*
^(?=.*E)(?=(.*G){2})。*
都是正确的是,但是让我们假设在EGG示例中给出了字母LTGEGU,单词长度必须是3个字母。因此,我必须创建所有字母LTGEGU和长度3的组合,以匹配字典中的所有单词是否?@king我刚刚意识到你想要匹配任何单词,而不是特定的单词。你仍然可以通过使用替代词(即“或”)来完成。例如,要匹配“蛋”、“腿”或“内脏”,请使用
^((?=.*E)(?=(.*G){2})。*|(?=.*L)(?=.*E)(?=.*G)|(?=.*G)(?=.*U)(?=.*T)).
。字长不相关-你可以有多种。此外,regex不是完成此任务的正确方法。这是可以做到的,但这并不意味着应该做到。