Ruby正则表达式select不带[

Ruby正则表达式select不带[,ruby,regex,Ruby,Regex,我需要选择不带[在我的日志中]的信函消息1 我的日志: 我的正则表达式: 参考: 我需要匹配结果消息1 LogMessage:INFO:sm-Server-02110,而不是消息1 LogMessage:INFO:[sm-Server-02110 我试了以下方法: 但这是char类的过早结束 建议我如何在不选择此选项的情况下选择值。以下答案由Wiktor Stribiżew在评论中请求发布 无法将文本的非连续部分捕获为一组。因此,我们有两种不同的可能性: 1.Wiktor Stribiżew:

我需要选择不带[在我的日志中]的信函消息1

我的日志:

我的正则表达式:

参考:

我需要匹配结果消息1 LogMessage:INFO:sm-Server-02110,而不是消息1 LogMessage:INFO:[sm-Server-02110

我试了以下方法:

但这是char类的过早结束


建议我如何在不选择此选项的情况下选择值。

以下答案由Wiktor Stribiżew在评论中请求发布

无法将文本的非连续部分捕获为一组。因此,我们有两种不同的可能性:

1.Wiktor Stribiżew:

input = "[LogMessage:INFO:[sm-Server-02110] Product=Policy"
input =~ /^\[(?<message1>\S+)\]\s(?<message2>.*)$/
[$~[:message1].delete('['), $~[:message2]]
#⇒ [
#    [0] "LogMessage:INFO:sm-Server-02110",
#    [1] "Product=Policy"
# ]
2.mudasobwa:

input =~ /^\[(?<message1_1>.+?)\[(?<message1_2>.+?)\]\s(?<message2>.*)$/
[$~[:message1_1] + $~[:message1_2], $~[:message2]]
#⇒ [
#    [0] "LogMessage:INFO:sm-Server-02110",
#    [1] "Product=Policy"
# ]

下面的答案由Wiktor Stribiżew在评论中提出

无法将文本的非连续部分捕获为一组。因此,我们有两种不同的可能性:

1.Wiktor Stribiżew:

input = "[LogMessage:INFO:[sm-Server-02110] Product=Policy"
input =~ /^\[(?<message1>\S+)\]\s(?<message2>.*)$/
[$~[:message1].delete('['), $~[:message2]]
#⇒ [
#    [0] "LogMessage:INFO:sm-Server-02110",
#    [1] "Product=Policy"
# ]
2.mudasobwa:

input =~ /^\[(?<message1_1>.+?)\[(?<message1_2>.+?)\]\s(?<message2>.*)$/
[$~[:message1_1] + $~[:message1_2], $~[:message2]]
#⇒ [
#    [0] "LogMessage:INFO:sm-Server-02110",
#    [1] "Product=Policy"
# ]

获得匹配后,只需将其从message1中删除。无法将文本的非连续部分捕获到一个组中。另一种方法是分别匹配LogMessage:INFO:和sm-Server-02110,然后将它们连接起来。@mudasobwa:如果您有时间,请发布一个显示此方法的答案。或者两者都可以。@WiktorStribiżew doneJust获得匹配后将其从message1中删除。无法将文本的非连续部分捕获到一个组中。另一种方法是分别匹配LogMessage:INFO:和sm-Server-02110,然后将它们连接起来。@mudasobwa:如果您有时间,请发布一个显示此方法的答案。或者两者都可以。@WiktorStribiżew done
input = "[LogMessage:INFO:[sm-Server-02110] Product=Policy"
input =~ /^\[(?<message1>\S+)\]\s(?<message2>.*)$/
[$~[:message1].delete('['), $~[:message2]]
#⇒ [
#    [0] "LogMessage:INFO:sm-Server-02110",
#    [1] "Product=Policy"
# ]
input =~ /^\[(?<message1_1>.+?)\[(?<message1_2>.+?)\]\s(?<message2>.*)$/
[$~[:message1_1] + $~[:message1_2], $~[:message2]]
#⇒ [
#    [0] "LogMessage:INFO:sm-Server-02110",
#    [1] "Product=Policy"
# ]