有没有办法从右到左匹配正则表达式?我要找的是一个正则表达式,它可以
MODULE WAS INSERTED EVENT
LOST SIGNAL ON E1/T1 LINK OFF
CRC ERROR EVENT
CLK IS DIFF FROM MASTER CLK SRC OF从下面的输入
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如果我可以完成从右到左的匹配,我可以写下(EVENT|OFF)右边的所有内容,直到第二次出现一个以上的空格+
我今天所做的最好的事情就是用正则表达式获取从(022)到事件的所有内容
CLI MUX trap received: \([0-9]+\)[ ]+(.*[ ]+(EVENT|OFF))但这并不是我真正想要的:)
编辑:它的语言是什么?它实际上是一个过滤器的配置字符串,但我猜它使用的是标准的GNU C Regex库。
edit2:我喜欢关于按长度剪切的答案,但Amarghosh可能更符合我的要求。我真的不知道为什么我没有想过只削减长度,比如:
^.{56}(.{39}).*$非常感谢你的快速回答...
发布于 2010-06-07 21:09:31
如果保证标记由多个空格分隔,并且保证EVENT|OFF之前的字符串中的单词只由一个空格分隔,则可以查找以单个空格分隔的单词,后跟空格,然后是EVENT或OFF
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]);输出:
MODULE WAS INSERTED EVENT
LOST SIGNAL ON E1/T1 LINK OFF
CRC ERROR EVENT
CLK IS DIFF FROM MASTER CLK SRC OFF正则表达式:/\([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发布于 2010-06-07 20:55:44
在.NET中,您可以使用RightToLeft option:
Regex RE = new Regex(Pattern, RegexOptions.RightToLeft);
Match theMatch = RE.Match(Source);发布于 2010-06-07 21:04:20
使用regex,您可以简单地替换以下代码:
^.{56}|.{19}$使用空字符串。
但实际上,您只需要使用substring函数将字符串从"position 56“剪切到" string -length - 19”。这比正则表达式更容易、更快。
下面是一个用JavaScript编写的例子,其他语言的工作原理大同小异:
var lines = [
'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'
];
for (var i=0; i<lines.length; i++) {
alert( lines[i].substring(56, lines[i].length-19) );
}https://stackoverflow.com/questions/2989606
复制相似问题