我有这个字符串:
2014-01-09T06:16:53.748849+00:00 heroku[路由器]: at=info method=POST fwd="94.66.255.106"dyno=web.12 connect=12ms service=21ms status= 200 字节=78
我希望它是:
2014-01-09T06:16:53.748849+00:00 heroku[router]: info POST "94.66.255.106"web.12 12ms 21ms 200 78
我试过这样的:
/.*=/
但它匹配第一个和最后一个等号之间的任何内容。
我确信替换第一个是可以的,然后使用类似 gsub
的东西来替换它们。
最佳答案
您的模式 /.*=/
匹配除换行符之外的任何字符,直到一行中遇到的最后一个 =
。发生这种情况是因为 *
是一个贪婪的量词,并且匹配尽可能多的字符。
您似乎需要匹配 =
之前没有空格的子字符串。你可以使用
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 个或多个(由于+
量词)空格和=
([^...]
是否定字符类,匹配所有不在其中的字符)=
- 等号
关于ruby - 删除空格和等号之间的任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35919790/