>假设我有一个很大的段落,其中有单词像found
field
failed
fired
killed
(我知道很多负面单词!!
现在,我想获取单词从 fi
hi
或 k
开头并以 eld
或 ed
结尾的行
我将如何在字符串中搜索这种单词模式....??
请检查我问的是字符串中的单词模式,而不是字符串模式
这两个肯定不起作用
egrep "^(f[ai]|k)+(eld|ed)$"
和
egrep "<(f|k)+(eld|ed)$>"
我承认我不是regex
的绿巨人,这样做是出于基本的理解,所以任何愿意提出更好方法(带有一些描述)的人也是最受欢迎的!! :)
您可能正在寻找的正则表达式是
"b([fh]i|k)w*(eld|ed)b"
w*
应该等同于 [a-zA-Z0-9_]*
,这样就允许任何类似单词的字符在请求的字符串之间。
b
是为了确保这个词真的以你想要的字母开始和结束。否则,例如,您可能会包含单词的匹配字符串Unfailed
您还需要从正则表达式中删除$
和^
$
因为这意味着行尾和行首^
。
我会使用
<(fi|hi|k)[a-zA-Z]*?(eld|ed)>
以匹配您想要的单词。
演示 @ 正则表达式101
(当您查看演示时:b
与<
相同
解释:
< #beginning of word
(fi|hi|k) #either fi or hi or k
[a-zA-Z]*? #zero to unlimited of a-z and A-Z
(eld|ed) #either eld or ed
> #end of word
如果要允许数字,破折号,下划线,...在你的单词中,只需将它们添加到字符类中,例如:如果您想也允许$
和_
,则[a-zA-Z$_]
。
您可以使用单词边界b
。
^.*b(fi|hi|k)w*(eld|ed)b.*$
------------------------
此模式将选择包含这些单词的行
注意:您需要使用多行修饰符m
和全局修饰符g
在这里尝试一下