Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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/1/ssh/2.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 如何在两个定义良好的模式之间匹配最多n个自由字符的字符串?_Regex_Grep - Fatal编程技术网

Regex 如何在两个定义良好的模式之间匹配最多n个自由字符的字符串?

Regex 如何在两个定义良好的模式之间匹配最多n个自由字符的字符串?,regex,grep,Regex,Grep,假设我有一堆文章的文本。我希望能够grep与新冠病毒-19相关的模式。考虑到有些人称之为Cov2、CoV-2、COVID-2、COVID-19、COVID-19、COVID-19等等,我该如何寻找这样的东西呢 基本上,我到目前为止的模式是 grep "[Cc][Oo][Vv].{0,3}2\|[Cc][Oo][Vv].{0,3]19" file.txt 但这不起作用。我很确定问题出在“{0,3}”部分。我不知道如何告诉计算机匹配最多3个自由字符,后跟2或19,前面加[Cc]

假设我有一堆文章的文本。我希望能够grep与新冠病毒-19相关的模式。考虑到有些人称之为Cov2、CoV-2、COVID-2、COVID-19、COVID-19、COVID-19等等,我该如何寻找这样的东西呢

基本上,我到目前为止的模式是

grep "[Cc][Oo][Vv].{0,3}2\|[Cc][Oo][Vv].{0,3]19" file.txt

但这不起作用。我很确定问题出在“{0,3}”部分。我不知道如何告诉计算机匹配最多3个自由字符,后跟2或19,前面加[Cc][Oo][Vv]

假设您有一个GNU
grep
,您的模式包含几个错误:

  • {0,3}
    -在POSIX BRE模式中,范围量词由一对转义大括号定义,
    \{0,3\}
  • {0,3]
    -相同的注释,只是右大括号被替换为
    ]
你可以用

grep -i -E "COV.{0,3}(2|19)" file
或者,更精确一点:

grep -i -E "COV(ID)?[-[:space:]]?(2|19)" 
看到了吗

详细信息

  • -i
    -不区分大小写模式
  • -E
    -POSIX ERE语法已启用(以避免正则表达式模式中出现额外的
    \
    符号)
  • COV.{0,3}(2 | 19)
    -
    COV
    子字符串(不区分大小写),然后是任意零到三个字符,然后是
    2
    19
  • (ID)?[-[:space:][]?
    -匹配可选的
    ID
    子字符串,然后匹配可选的
    -
    或空白字符

grep-i-E“COV.{0,3}(2 | 19)”
?仅供参考,如果您转义
{
}
符号,您的正则表达式就会工作(使用标志
-E
意味着您不再需要转义这些字符)谢谢。我想知道为什么我的模式不起作用。看起来它应该能够捕捉到这一点pattern@ZuhaibAhmed请检查更新后的答案,我补充解释。@ ZuiHaBaMeMe很高兴为您工作。请考虑通过点击接受答案。✓ 在左边。