Ruby Regexp精确匹配字符串
发件人: 致: 我的正则表达式是:Ruby Regexp精确匹配字符串,ruby,regex,Ruby,Regex,发件人: 致: 我的正则表达式是: id=14291 name=yfsun msg=some@string; .NET code=200 正如您所看到的,msg部分将是一个问题,因为msg可能有@字符串 有什么想法吗?谢谢如果是最后命名的组,您只需将更改为 (?*) 我不明白为什么一个简单的正则表达式不行。我是不是忽略了什么 (?<msg>.*) 我不明白,请详细说明您想要或期望的是什么以及您需要什么。只需将msg命名组更改为贪婪即可(?*)@hwnd nice,这就是我
id=14291 name=yfsun msg=some@string; .NET code=200
正如您所看到的,msg
部分将是一个问题,因为msg
可能有@
字符串
有什么想法吗?谢谢如果
是最后命名的组,您只需将
更改为
(?*)
我不明白为什么一个简单的正则表达式不行。我是不是忽略了什么
(?<msg>.*)
我不明白,请详细说明您想要或期望的是什么以及您需要什么。只需将msg
命名组更改为贪婪即可(?*)
@hwnd nice,这就是我想要的,谢谢。简单来说,这会更有效(+1
)我需要使用正则表达式来完成这项工作,因为这是应用程序的配置,只支持正则表达式,所以不能使用split函数…但是split
的参数是正则表达式(尽管它可能是字符串)。您必须结合正则表达式使用某种方法(可能是扫描
或拆分
)。你不能单独使用正则表达式来做任何事情。实际上我使用的是fluentd。我可以在这里指给你看。如果您在此页面上搜索regexp
,您可以找到格式
选项,应该是regexp。我在fluentd的解析器中尝试了/(?。+?)(?=@;@|$)/
。它被解析了,但我不知道它在后续步骤中是否有效。(只是在黑暗中捅了一刀。)
/^(?<id>[^@]*)@;@(?<name>[^@]*)@;@(?<msg>[^@]*)@;@(?<code>[^@]*)$/
(?<msg>.*)
str = "14291@;@yfsun@;@some@string; .NET@;@200"
id, name, msg, code = str.split(/@;@/)
id = id.to_i #=> 14291
name #=> "yfsun"
msg #=> "some@string; .NET"
code = code.to_i #=> 200