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

时间:2018-02-28 16:20:32

标签: java regex

我有以下两句话:

  

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

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

  

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

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

(?<=KEYWORD)[\s\S]+
这只会匹配关键字后的所有内容,但如果关键字不存在则无法捕获任何内容...

PS:我用java

2 个答案:

答案 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

答案 1 :(得分:3)

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

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

RegEx Demo

<强>详细信息:

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