首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java regex问题(负前瞻性和回顾性)

Java regex问题(负前瞻性和回顾性)
EN

Stack Overflow用户
提问于 2019-10-18 15:48:04
回答 1查看 409关注 0票数 1

我需要你们的帮助伙计们!这是一个棘手的java regex问题,几个小时来一直在寻找解决方案.下面是:

在下面的文字中,我想匹配“船”这个词.

  1. ,并包括“成束”如果放置在它前面。
  2. 和包括“螺旋桨”,如果就在它后面。
  3. 或不匹配,如果以“一串”为中间。
  4. 或不匹配,如果后面是“预告片”,即使在“螺旋桨”之间。

我有一艘船要卖。它有额外的船螺旋桨,但没有船拖车(船是相当大,所以你可能需要一个船螺旋桨拖车)。我曾经有一堆船,但随着时间的推移,我对一艘船的热情逐渐减弱。我不认为人们会对一堆船感兴趣,但这是我最后一艘船,所以耶耶!)

以下各部分应匹配:

  • boat ("boat")
  • bunch of ")
  • boat (“船”前面是“”)
  • boat螺旋桨的束“(船后面跟着”螺旋桨“)

以下部分不应匹配(甚至部分不匹配):

  • for a trailer")
  • for (“船”前面加上"for a ")
  • boat “)(”船“后面跟着”trailer“)
  • for a boat of ”(“trailer”)
  • for“前面加上”boat of“),在”boat of“前面加上”")
  • boat螺旋桨拖车“(”船“后面跟着”螺旋桨“,后面跟着”拖车“)

我在regex 101 ( https://regex101.com/r/o6S4SP/22 )中获得了这个示例设置,但是它没有正常工作:-(

PS:我使用Regex101作为示例,但是在Java语法中不支持“(跳过)(失败)”。

希望任何人都能帮忙:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-21 18:29:18

您可以在Java中使用以下正则表达式,该正则表达式具有受限的宽度查找模式(支持限制量词):

代码语言:javascript
复制
(?<!\bfor\sa\s(?:bunch\sof\s){0,1})(?:\bbunch\s+of\s+)?\bboats?\b(?:\s+propellers?)?+(?!\s+trailers?\b)

见。

在爪哇,

代码语言:javascript
复制
s = s.replaceAll("(?<!\\bfor\\sa\\s(?:bunch\\sof\\s){0,1})(?:\\bbunch\\s+of\\s+)?\\bboats?\\b(?:\\s+propellers?)?+(?!\\s+trailers?\\b)", "<b>$0</b>");

Regex详细信息

  • (?<!\bfor\sa\s(?:bunch\sof\s){0,1}) -如果在当前位置的左侧有
    • \bfor\sa\s - for、空格、a、whitespace
    • (?:bunch\sof\s){0,1} -0或1出现bunch、空格、of、whitespace

的情况(即可选事件),则会导致匹配失败。

  • (?:\bbunch\s+of\s+)? --一个可选的bunch、1+白空间、of、1+ bunch--一个完整的单词boatboats
  • (?:\s+propellers?)?+ --一个1+白色空间的可选出现,后面跟着propellerpropellers。注意:在这里,只有在这个组pattern.
  • (?!\s+trailers?\b)之后才能执行下一次查找,注意到:在当前位置的右侧有1+空格,然后是trailertrailers作为一个单词时,?+拥有式量词会导致匹配失败。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58454252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档