2011-11-18 104 views
0

假設我有串變量,如以下幾點:字符串格式檢查

s1="10$" 
s2="10$ I am a student" 
s3="10$Good" 
s4="10$  Nice weekend!" 

正如你看到的上面,s2s410$後空格(S)。

一般情況下,我想有一個方法來檢查,如果一個字符串10$開始10$後有白色空間(S)。例如,規則應該在我的上述情況下找到s2s4。如何定義這樣的規則來檢查一個字符串是否以'10 $'開頭並且之後有空格?

我的意思是類似s2.RULE?的東西應該返回true或false來判斷它是否是匹配的字符串。

----------更新-------------------

也請告知解決辦法,如果10#來代替的10$

+0

氣味像功課。將作業問題標記爲「作業」是一種很好的做法,並且包含您編寫的源代碼以表明您已嘗試解決該問題。 –

回答

4

您可以使用Regular Expressions(準確地說,Ruby具有Perl風格的正則表達式)來執行此操作。

# For ease of demonstration, I've moved your strings into an array 
strings = [ 
    "10$", 
    "10$ I am a student", 
    "10$Good", 
    "10$  Nice weekend!" 
] 

p strings.find_all { |s| s =~ /\A10\$[ \t]+/ } 

正則表達式打破了這樣的:

  • /在開頭和結尾告訴紅寶石,一切都在兩者之間的正則表達式
  • \A的一部分的開始處匹配字符串
  • 10逐字匹配
  • \$表示匹配一個$逐字。我們需要逃避它,因爲$在正則表達式中有特殊的含義。
  • [ \t]+手段「比賽至少有一頁空白和/或選項卡」

所以這個正則表達式說:「每場與10$開頭的字符串後面至少一個空白或製表符」。使用=~,您可以在Ruby中針對此表達式測試字符串。 =~將返回一個非零值,如果在諸如if的條件下使用該值,則該值爲真。

編輯:根據Asmageddon's建議更新的空白空間匹配。

+1

\ s也會匹配換行符,我會用[\ t \]代替。 – Llamageddon

+0

如果字符串中包含'#'而不是'$',那麼我需要通過\#轉義#還是不轉? – Mellon

+0

不,'#'不是特殊字符。 [Ruby QuickRef](http://www.zenspider.com/Languages/Ruby/QuickRef.html#12)列出了您需要注意的所有特殊字符。 – Markus

1

這個工程:

"10$ " =~ /^10\$ +/ 

,再返回nilfalse0true。感謝Ruby的規則,您可以直接使用它。

1

使用正則表達式像這樣的:

/10\$\s+/ 

編輯

如果使用=〜用於匹配,注意

=〜操作符返回字符位置中的字符串 比賽開始

所以它可能返回0來表示匹配。只有返回零才意味着不匹配。

關於ruby的正則表達式教程,見例如http://www.regular-expressions.info/ruby.html

+0

'10 \ $ +'可以匹配'$ 10 $ 10 $ 10',這很奇怪:) +1無論如何 – apneadiving

+0

真 - 刪除它。 – Thilo

+0

如果字符串包含'#'而不是'$',那麼我需要通過\#來逃避##還是不是? – Mellon

0

如果你想繼續例$那就試試這個正則表達式:

/^10[\$#] +/