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中测试),但不会显示任何结果。
我是红宝石的新手。请帮助我如何从给定字符串
中提取/Unhandled Exception:(.*?):/
的匹配项
答案 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