匹配动词与之后的任何单词匹配

时间:2017-11-27 12:49:21

标签: regex boost

我希望将动词的不同形式匹配为,然后是不带 ing 结尾的单词,然后是。< / p>

我有这样的正则表达式:

\b(is|it's|are|been|was|were|am|'m)(.*(?!ing\s))\bto\b‌

然而,与

一起使用时
Peppa and George love jumping in muddy puddles.

“跳入”仍然可以匹配,如何修改表达式?

1 个答案:

答案 0 :(得分:0)

您可以使用以下正则表达式匹配be + space-separated word(s) + to,同时排除be + verb-ing + to

(?:\b(?:is|it's|are|been|was|were|am)|(?:\B'm))(?:\s+\w++(?<!ing))*\s+to\b

请参阅regex demo

<强>详情

  • (?: - 一个变更组:
    • \b(?:is|it's|are|been|was|were|am) - 列表中的完整字词
    • | - 或
    • (?:\B'm) - 'm前面没有任何单词char
  • ) - 小组结尾
  • (?:\s+\w++(?<!ing))* - 0+序列
    • \s+ - 1+空格
    • \w++(?<!ing) - 一个不以ing
    • 结尾的单词
  • \s+ - 1+空格
  • to\b - 整个单词to\b是单词边界)

请注意,一开始只有一个\b让您匹配'm,因为'不是字char。您可以将第一个(?:\b(?:is|it's|are|been|was|were|am)|(?:\B'm))部分替换为(?<!\w)(?:is|it's|are|been|was|were|am|'m),或者,如果您希望仅在没有空格的情况下匹配它们(?<!\S)(?:is|it's|are|been|was|were|am|'m)。或者,(?<![^\W\d_])(?:is|it's|are|been|was|were|am|'m)(如果之前没有字母)。