Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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 所有元音按任何顺序排列的grep单词_Regex_Grep - Fatal编程技术网

Regex 所有元音按任何顺序排列的grep单词

Regex 所有元音按任何顺序排列的grep单词,regex,grep,Regex,Grep,基本上,我想知道是否有一种方法可以在单个grep命令中表示以下内容: grep "a" words.txt | grep "e" | grep "o" | grep "i" | grep "u" 按任意顺序查找包含5个元音的所有单词 我能想到的唯一方法是列出所有可能的组合,这真的很麻烦。您可以像这样使用awk检查所有元音: awk '/a/ && /e/ && /i/ && /o/ && /u/' words.txt 或者您可以

基本上,我想知道是否有一种方法可以在单个grep命令中表示以下内容:

grep "a" words.txt | grep "e" | grep "o" | grep "i" | grep "u"
按任意顺序查找包含5个元音的所有单词


我能想到的唯一方法是列出所有可能的组合,这真的很麻烦。

您可以像这样使用
awk
检查所有元音:

awk '/a/ && /e/ && /i/ && /o/ && /u/' words.txt
或者您可以使用
grep-p
使用lookahead regex简化它:

grep -P "(?=[^a]*a)(?=[^e]*e)(?=[^i]*i)(?=[^o]*o)(?=[^u]*u)" words.txt 

非常相似:@fedorqui,“按顺序”不同于“按任何顺序”@fedorqui我的问题是按“任何”顺序查找它们,而不是aeiou。你能解释一下
-P
标志的确切含义吗?
-P
标志在现代
grep
中用于PCRE regex功能。你为什么使用否定类?如果
(?=[^a]*a)
那么
(?=.*a)
@Bohemian:这不是我第一次讨论否定与非贪婪性能的比较。选中2个链接,并在这两个链接中单击
regex debugger
。然后。你们会注意到,懒散量词在做同样的事情时要多走3倍的步骤。很有趣。我只是用java编写了一个小测试工具来比较两者的实际性能,因为我认为比较
要比
[^a]
快。我的测试数据是10K个混合字母。当输入只有13个随机字母时,版本1(
(?=[^a]*a)
等)大约慢了50%,当使用全部26个字母时,版本2大约慢了10%,当使用更长的输入时,版本2大约慢了20%。总体而言,性能大致相同,
(?=.*a)
版本在输入较短的情况下性能不佳,而
(?=[^a]*a)
版本在输入较长的情况下性能略有提高