我有这个字符串:
2014-01-09T06:16:53.748849+00:00 heroku[router]: at=info method=POST fwd="94.66.255.106" dyno=web.12 connect=12ms service=21ms status=200 bytes=78
我希望如此:
2014-01-09T06:16:53.748849+00:00 heroku[router]: info POST "94.66.255.106" web.12 12ms 21ms 200 78
我试过这样的事情:
/.*=/
但它匹配第一个和最后一个等号之间的任何内容。
我确定更换第一个是好的,然后使用类似gsub
的内容替换它们。
答案 0 :(得分:2)
您的模式/.*=/
匹配任何字符,但直到最后一行遇到的=
。这是因为*
是一个贪婪的量词,并且匹配尽可能多的字符。
您似乎需要在=
之前匹配没有空格的子字符串。你可以使用
s.gsub(/[^\s=]+=/, '')
请参阅IDEONE和regex demo
s = '2014-01-09T06:16:53.748849+00:00 heroku[router]: at=info method=POST fwd="94.66.255.106" dyno=web.12 connect=12ms service=21ms status=200 bytes=78'
puts s.gsub(/[^\s=]+=/, '')
# => 2014-01-09T06:16:53.748849+00:00 heroku[router]: info POST "94.66.255.106" web.12 12ms 21ms 200 78
模式匹配:
[^\s=]+
- 1个或更多(由于+
量词)字符以外的空格和=
([^...]
是否定字符类,所有字符都不在其中匹配)=
- 等号答案 1 :(得分:1)
总而言之,你想要的正则表达式将选择所有字符串(长度为1+),这些字符串是非空白字符,并且位于等号之前,包括等号。
/\S+=/
是正则表达式。 Here's a demo.
答案 2 :(得分:0)
这是因为。*的贪婪行为改为:
/.*?=/