首页 > 解决方案 > 正则表达式 (PCRE) 匹配单词之间的单词

问题描述

你好!我对正确的 PCRE 表达式有疑问。示例文本中需要加粗的单词(动物名称):

这种动物叫河马,能战胜的就是河马,能战胜的也就是河马,能战胜的就是河马,能战胜的
就是河马, 这种动物叫灰兔不能战胜的 动物叫小灰兔只能克服 这是一个考验。动物叫小灰兔,能战胜的不过是





这是我所做的表达。不幸的是,我无法使其正常工作,请帮助。{1,3} 量词如果可能需要替换为 * (匹配 0 个或多个前面的标记。)

(^|called )\K([a-z]* ?){1,3}(?=( and)? can overcome)

标签: regexpcre

解决方案


您可以使用

(?:^|called\s+)\K[A-Z][a-z]*(?:\s+[A-Z][a-z]*)*?(?=(?:\s+and)?\s+can\s+overcome)

请参阅正则表达式演示详情

  • (?:^|called\s+)- 字符串开头 orcalled和一个或多个空格
  • \K- 匹配重置运算符
  • [A-Z][a-z]*- 一个大写字母和零个或多个小写字母
  • (?:\s+[A-Z][a-z]*)*?- 零个或多个,但尽可能少地出现一个或多个空格、一个大写字母,然后是零个或多个小写字母
  • (?=(?:\s+and)?\s+can\s+overcome)- 与紧随其后的位置匹配的正向前瞻
    • (?:\s+and)?- 零个或多个空格的可选出现和and
    • \s+can\s+overcome- 零个或多个空格, can, 零个或多个空格, overcome.

推荐阅读