使用ruby

时间:2017-11-23 15:35:42

标签: ruby regex substring

ex = "g4net:HostName=abc}\n Unhandled Exception: \nSystem.NullReferenceException: Object reference not set to an";
puts ex[/Unhandled Exception:(.*?):/,0]

/Unhandled Exception:(.*?):/应与\nSystem.NullReferenceException匹配(在rubular中测试),但不会显示任何结果。

enter image description here

我是红宝石的新手。请帮助我如何从给定字符串

中提取/Unhandled Exception:(.*?):/的匹配项

2 个答案:

答案 0 :(得分:2)

Ruby(以及大多数其他语言)使用正则表达式方言,默认情况下不会将换行符与.匹配。在Ruby中,您可以使用m(多行)修饰符:

matchinfo = ex.match(/Unhandled Exception: (.*)/m)
# Allow "." to match newlines ------------------^
matchinfo[1] # => "\nSystem.NullRef..."

您也可以使用字符类[\s\S]代替.来获得类似效果,而无需使用多线修改器:

matchinfo = ex.match(/Unhandled Exception: ([\s\S]*)/)
# Really match *any* character -------------^----^
matchinfo[1] # => "\nSystem.NullRef..."

答案 1 :(得分:1)

在多行模式下运行正则表达式应该可以解决问题:

(?m)Unhandled Exception:(.*?):

代码:

re = /Unhandled Exception:(.*?):/m
str = 'g4net:HostName=abc}
 Unhandled Exception: 
System.NullReferenceException: Object reference not set to an
'

# Print the match result
str.scan(re) do |match|
    puts match.to_s
end