匹配所有“word”后如果存在,如果“word”不存在,则匹配all

问题描述 投票:1回答:2

我有以下两句话:

1:关键字这是一个随机的句子 2:这是另一个随机的句子

如果KEYWORD存在,我想在KEYWORD之后匹配所有,如果不存在,我想匹配所有。 所以输出将是:

1:这是一个随机的句子 2:这是另一个随机的句子

我尝试了一些不能让我接近的事情:

(?<=KEYWORD)[\s\S]+
This would only match everything after the keyword, but will fail to capture anything if the keyword is not present...


PS: I use java
java regex
2个回答
3
投票

作为ctwheel的优秀工作解决方案的替代方案,您可以使用这个可以执行得更快的正则表达式,因为没有调节贪婪的令牌在每个角色之前断言前瞻。

(?<=KEYWORD |^(?!.*KEYWORD)).*

RegEx Demo

细节:

  • (?<=KEYWORD:如果我们在之前的位置有"KEYWORD "
  • |:或
  • ^(?!.*KEYWORD):我们在任何地方都没有KEYWORD
  • .*:匹配任何字符的0或更多

3
投票

See regex in use here

(?<=KEYWORD).*|^(?:(?!KEYWORD).)*$
  • 选项1 (?<=KEYWORD)积极的外观确保KEYWORD之前的前景 .*任何次数匹配任何角色(\n除外)
  • 选项2 ^在线的开头断言位置 (?:(?!KEYWORD).)* Tempered greedy token匹配任何字符,除了KEYWORD匹配的地方 $在线的末尾断言位置

结果:

this is a random sentence
this is another random sentence
© www.soinside.com 2019 - 2024. All rights reserved.