从右到左匹配正则表达式?

Bal*_*roq 13 regex

有没有办法从右到左匹配正则表达式?我正在寻找的是正则表达式

MODULE WAS INSERTED              EVENT
LOST SIGNAL ON E1/T1 LINK        OFF
CRC ERROR                        EVENT
CLK IS DIFF FROM MASTER CLK SRC  OF
Run Code Online (Sandbox Code Playgroud)

从这个输入

CLI MUX trap received: (022) CL-B  MCL-2ETH             MODULE WAS INSERTED              EVENT   07-05-2010 12:08:40
CLI MUX trap received: (090) IO-2  ML-1E1        EX1    LOST SIGNAL ON E1/T1 LINK        OFF     04-06-2010 09:58:58
CLI MUX trap received: (094) IO-2  ML-1E1        EX1    CRC ERROR                        EVENT   04-06-2010 09:58:59
CLI MUX trap received: (009)                            CLK IS DIFF FROM MASTER CLK SRC  OFF     07-05-2010 12:07:32
Run Code Online (Sandbox Code Playgroud)

如果我可以从右到左完成匹配,我可以写出类似于(EVENT | OFF)的所有内容,直到第二次出现多个空格[] +

我今天做的最好的事情就是用正则表达式从(022)到EVENT

CLI MUX trap received: \([0-9]+\)[ ]+(.*[  ]+(EVENT|OFF))
Run Code Online (Sandbox Code Playgroud)

但那不是我想要的:)

编辑:它用于什么语言?它实际上是我们拥有的过滤器的配置字符串,但我猜它是使用标准的GNU C Regex库.

编辑2:我喜欢关于切割长度的答案,但Amarghosh可能更像我正在寻找的东西.真的不知道为什么我不考虑只是缩短长度:

^.{56}(.{39}).*$
Run Code Online (Sandbox Code Playgroud)

非常感谢快速回答......

Jul*_*rau 20

在.NET中,您可以使用以下RightToLeft 选项:

Regex RE = new Regex(Pattern, RegexOptions.RightToLeft);
Match theMatch = RE.Match(Source);
Run Code Online (Sandbox Code Playgroud)


Ama*_*osh 2

如果标记保证由多个空格分隔,并且字符串中的单词之前EVENT|OFF保证仅由一个空格分隔 - 只有这样您才能查找单空格分隔的单词,后跟空格,后跟EVENTOFF

var s = "CLI MUX trap received: (022) CL-B  MCL-2ETH             MODULE WAS INSERTED              EVENT   07-05-2010 12:08:40"
        + "\nCLI MUX trap received: (090) IO-2  ML-1E1        EX1    LOST SIGNAL ON E1/T1 LINK        OFF     04-06-2010 09:58:58"
        + "\nCLI MUX trap received: (094) IO-2  ML-1E1        EX1    CRC ERROR                        EVENT   04-06-2010 09:58:59"
        + "\nCLI MUX trap received: (009)                            CLK IS DIFF FROM MASTER CLK SRC  OFF     07-05-2010 12:07:32"

var r = /\([0-9]+\).+?((?:[^ ]+ )* +(?:EVENT|OFF))/g;
var m;
while((m = r.exec(s)) != null)
  console.log(m[1]);
Run Code Online (Sandbox Code Playgroud)

输出:

MODULE WAS INSERTED              EVENT
LOST SIGNAL ON E1/T1 LINK        OFF
CRC ERROR                        EVENT
CLK IS DIFF FROM MASTER CLK SRC  OFF
Run Code Online (Sandbox Code Playgroud)

正则表达式:/\([0-9]+\).+?((?:[^ ]+ )* +(?:EVENT|OFF))/g

\([0-9]+\)       #digits in parentheses followed by  
.+?              #some characters - minimum required (non-greedy)  
(                #start capturing 
(?:[^ ]+ )*      #non-space characters separated by a space  
` +`             #more spaces (separating string and event/off - 
                 #backticks added for emphasis), followed by
(?:EVENT|OFF)    #EVENT or OFF
)                #stop capturing
Run Code Online (Sandbox Code Playgroud)