通过正则表达式匹配WORD模式

时间:2014-02-18 12:06:41

标签: regex bash word-boundaries

假设我有一个很大的段落,其中有一些词语如found field failed fired killed这么多否定词我知道!!

现在,我想要获取单词 fi hik以及结尾 {{ 1}}或eld

我如何在字符串中搜索这种单词格式???

继续检查我在询问字符串中的字模式,而不是字符串模式

这两个肯定没有用

ed

egrep "^(f[ai]|k)+(eld|ed)$"

我承认我不是egrep "\<(f|k)+(eld|ed)$\>" 的笨蛋,是出于基本的理解,所以任何愿意建议更好的方式(带有一些描述)的人都是最受欢迎的太!! :)

3 个答案:

答案 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