【问题标题】:Regex (PCRE) Match words between words正则表达式 (PCRE) 匹配单词之间的单词
【发布时间】:2021-09-21 23:06:51
【问题描述】:

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

这种动物叫河马,能战胜的只有
被称为Hippo,能战胜的不过是
Hippo,能战胜的不过是
Hippo,能战胜的不过是
Hippo br> 这种动物叫灰兔,能战胜的只有
这种动物叫小灰兔,能战胜的不过是
这是一个测验。动物叫小灰兔能克服的不过是

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

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

【问题讨论】:

  • 试试(?:^|called\s+)\K[A-Z][a-z]*(?:\s+[A-Z][a-z]*)*?(?=(?:\s+and)?\s+can\s+overcome),见demo
  • 天哪,这太漂亮了!我会试着研究你的表情。谢谢!
  • 如果我的回答没有解决您的问题,请考虑更新问题。

标签: regex pcre


【解决方案1】:

你可以使用

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

请参阅regex demo详情

  • (?:^|called\s+) - 字符串开头或called 和一个或多个空格
  • \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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-14
    • 1970-01-01
    • 2020-10-18
    相关资源
    最近更新 更多