正则表达式以某个单词开头,如果找到一个单词则结束,否则取整行

正则表达式以某个单词开头,如果找到一个单词则结束,否则取整行

我正在寻找一个以以下内容开头--并结束的正则表达式:

  • 发现另一个--(必须包括在内),
  • 或者发现行尾。

对于带有行尾的版本,它可以与--[^\n]*或一起使用--.*$,对于以它结尾的版本,--它可以与一起使用--[^\n]*--,但我无法设法将两者结合起来,以便如果--发现另一个,它不会占用该行的其余部分。

例如:

  • toto -- tata yoyo将匹配-- tata yoyo
  • toto -- tata -- yoyo将匹配-- tata --

编辑:根据@duDE的评论,我尝试过--[^\n]*(--|.*).*似乎赢了,--因为在第二个示例中结果匹配是-- tata -- yoyo

编辑2:感谢@guest,我找到了答案,这很简单--.*?(--|$)

注意:顺便说一下,我使用https://www.debuggex.com/测试正则表达式,我发现这是一个很棒的工具,并且,即使例如使用--[^\n]*(--|.*)正则表达式并且toto -- tata -- yoyo它返回“不匹配”,我们也可以看到-- tata -- yoyo部分匹配,因为突出显示了。

谢谢

答案1

根据您的正则表达式风格,您可以使用:

编辑:现在,匹配两个连字符(如果存在)。

--[^-\r\n]+(?:--|$)

演示与说明

答案2

也许类似于^.*(\<|$)(从行首到单词首/行末的任何内容)...

答案3

感谢@guest对我的问题进行了评论,我找到了答案,很简单--.*?(--|$)

答案4

为了完整起见,正确答案是

--.*?(--|$)

https://regex101.com/r/8mDFeE/1

.*?(vs )是.*该模式的非贪婪版本——捕捉最低限度下一个匹配的字符数,而不是最大值。

相关内容