假设我有一个很大的段落,其中有一些词语如found
field
failed
fired
killed
(这么多否定词我知道!! )
现在,我想要获取单词 fi
hi
或k
以及结尾 {{ 1}}或eld
我如何在字符串中搜索这种单词格式???
继续检查我在询问字符串中的字模式,而不是字符串模式
这两个肯定没有用
ed
和
egrep "^(f[ai]|k)+(eld|ed)$"
我承认我不是egrep "\<(f|k)+(eld|ed)$\>"
的笨蛋,是出于基本的理解,所以任何愿意建议更好的方式(带有一些描述)的人都是最受欢迎的太!! :)
答案 0 :(得分:2)
我用
\<(fi|hi|k)[a-zA-Z]*?(eld|ed)\>
匹配你想要的单词。
demo @ regex101
(当您查看演示时:\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$_]
如果你想允许$
和{ {1}}也是。
答案 1 :(得分:2)
你可能正在寻找的正则表达式是
"\b([fh]i|k)\w*(eld|ed)\b"
\w*
应该等同于[a-zA-Z0-9_]*
,这样任何类似字符的字符都可以在请求的字符串之间。
\b
可以确保单词真正以您想要的字母开头和结尾。否则,您可能会匹配包含单词Unfailed
此外,您需要从正则表达式中删除$
和^
,因为$
表示行尾,^
表示行的开头。
答案 2 :(得分:1)
您可以使用字边界\b
。
^.*\b(fi|hi|k)\w*(eld|ed)\b.*$
------------------------
此模式将选择包含这些单词的行
注意:您需要使用多行修饰符m
&amp;全局修饰符g
试试here