2016-03-10 62 views
1

我有這個字符串:在空間和等號之間刪除任何

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

我想是這樣的:

/.*=/ 

但它匹配第一個a最後等號。

我確定替換第一個是好的,然後使用類似gsub的東西來替換它們。

+0

通過正則表達式的語法,我們正在談論的JavaScript正則表達式是不是嗎? – 4castle

+0

@ 4castle:否Ruby –

回答

2

您的模式/.*=/匹配任何字符,只是換行符上遇到最後一個=。發生這種情況是因爲*是一個貪婪的量詞,並且匹配儘可能多的字符。

您似乎需要匹配在=之前沒有空格的子字符串。您可以使用

s.gsub(/[^\s=]+=/, '') 

IDEONEregex 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個或多個(由於+量詞)字符[^...]是否定字符類,所有字符都不匹配)
  • = - 等號
+0

「非等號」部分是否真的有必要?它所做的只是將'example = thing ='的1個匹配變成2個匹配。 – 4castle

+0

@ 4castle:當我們需要它爲我們工作時,回溯是我們的朋友,但在這裏,我們並不需要它。爲了使模式以線性方式工作,相鄰的子模式不應該彼此匹配。 207步驟(我的)與1005(你的)。我認爲我的模式表現更好,因爲它涉及的回溯少得多。 –

+0

回溯?線性?在這種情況下,我不明白你的意思。 – 4castle

0

這是因爲貪婪的行爲*試試這個:。

/.*?=/ 
+0

這不起作用 – 4castle

+0

方括號等號的基本含義是什麼? – mudasobwa

+0

無,用正則表達式將字符放在括號內是個人品味 – Dalorzo

1

總之,你想要的正則表達式會選擇屬於非空白字符,並且來的所有字符串(長度1+)在等號之前,包括等號。

/\S+=/是那個正則表達式。 Here's a demo.

+0

**更新:**現在使用'\ S'爲了選擇所有非空格字符而不是所有字符。 – 4castle

+0

現在'(?:\ s)'部分是多餘的。 – mudasobwa

+0

@mudasobwa謝謝。 – 4castle