2011-01-27 71 views
0

有沒有反正只有在我掃描之前沒有任何東西時才能掃描。正則表達式gsub只有在它之前沒有任何東西時

例如,我有一個帖子,我正在掃描一個正斜槓以及它後面的內容,但如果它不是開始字符,我不想掃描正斜槓。

我想掃描/這個,但我不想掃描這個/這個或http://this.com

我目前使用的正則表達式是..

/\/(\w+)/ 

我用這與GSUB每個/ forwardslash鏈接。

回答

3

我想你要求的只是匹配以'/'開頭的單詞,而不是以'/'開頭的字符串或行。如果這是真的,我相信下面的正則表達式將工作:%r{(?:^|\s+)/(\w+)}

例如:

"/foo /this this/that http://this".scan %r{(?:^|\s+)/(\w+)} # => [["foo"], ["this"]] 
+0

[在Rubular測試](http://rubular.com/r/ZzQAp3YT8Y),它的工作原理。 +1 – edgerunner 2011-01-27 13:21:41

+0

措辭!謝謝。 – morcutt 2011-01-27 20:06:21

2

插入符號(^)字符表示「字符串開頭」 - 美元符號($)表示「字符串結尾」。
所以

/^\/(\w+)/ 

...會得到你想要的東西 - 只在字符串的開頭匹配。

+3

插入符號和美元符號實際上是一行的開始/結束。爲了讓字符串的真實開頭結束,例如多行字符串,可以使用\ A和\ Z。 – 2011-01-27 02:38:38

0

第一件事情,因爲你使用的是與斜線正則表達式改變分隔符別的東西,然後你將不必逃避反斜槓,並且會更容易閱讀。

其次,如果您想要替換斜槓,那麼將其包含在捕獲中。

對正則表達式。

...如果它是不是開始 字符...

...一行:

!^(/\w+)! 

,如果它是不是開始 字符...

...一個字:

!\s(/\w+)! 

但是如果它在行的最開始處不匹配。爲此,你需要更復雜的東西,所以我只是在這裏運行這兩個正則表達式,而不是創建這個怪物。

相關問題