3

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

现在,我想获取单词以 or 开头 fi hik以or结尾的行 elded

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

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

这2个肯定没用

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

egrep "\<(f|k)+(eld|ed)$\>"

我承认我不是一个笨拙的人regex,出于基本的理解这样做,所以任何愿意提出更好方法(带有一些描述)的人也是最受欢迎的!:)

4

3 回答 3

3

您可能正在寻找的正则表达式是

"\b([fh]i|k)\w*(eld|ed)\b"

\w*应该等价于[a-zA-Z0-9_]*,因此将允许任何类似单词的字符位于请求的字符串之间。

\b可以确保单词真正以您想要的字母开头和结尾。否则,您可能会匹配包含单词的字符串Unfailed

您还需要从正则表达式中删除$^,因为这$意味着行尾和^行首。

于 2014-02-18T12:17:09.477 回答
2

我会用

\<(fi|hi|k)[a-zA-Z]*?(eld|ed)\>

匹配你想要的单词。

demo@regex101
(看demo的时候:\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$_]如果你也想允许$and _

于 2014-02-18T12:12:30.050 回答
1

您可以使用单词边界\b

^.*\b(fi|hi|k)\w*(eld|ed)\b.*$
   ------------------------

此模式将选择包含这些单词的行

注意:您需要使用多行修饰符m和全局修饰符g

在这里试试

于 2014-02-18T12:15:34.677 回答