什么是匹配不在行尾的字符串的正则表达式?

Tim*_*Tim 42 ruby regex

正则表达式/abc$/将匹配abc在行尾出现的正则表达式.我该怎么办?

我希望匹配abc不在一行的末尾.

此外,我将使用正则表达式来替换字符串,因此我只想捕获abc字符串之后的任何内容,因此/abc.+$/不起作用,因为它不仅会替换,而且还会替换abc任何内容abc.

使用正确的正则表达式是什么?

Ben*_*ate 61

/abc(?!$)/
Run Code Online (Sandbox Code Playgroud)

(?!$)是一个负面的先行.它将寻找abc的任何匹配,而不是直接跟随a $(行尾)

经过测试

  • abc ddee(比赛)
  • dddeee abc(不匹配)
  • adfassdf abc s(匹配)
  • f abc ddee(匹配)

将它应用于您的案例:

ruby-1.9.2-p290 :007 > "aslkdjfabcalskdfjaabcaabc".gsub(/abc(?!$)/, 'xyz')
  => "aslkdjfxyzalskdfjaxyzaabc" 
Run Code Online (Sandbox Code Playgroud)

  • 对于其他寻找它的人来说,在 Vim 中,否定前瞻是 [`\@!`](/sf/answers/1480407491/)。 (2认同)