如何編寫正則表達式以匹配不以空格字符開始或結束的字符串?匹配的字符串可以在中間有任何字符,重要的是,單個字符的字符串應該匹配。第一個字符和最後一個字符的正則表達式條件
我的嘗試是:
/\A\S.*\S\z/
但這不會匹配單個字符。
如何編寫正則表達式以匹配不以空格字符開始或結束的字符串?匹配的字符串可以在中間有任何字符,重要的是,單個字符的字符串應該匹配。第一個字符和最後一個字符的正則表達式條件
我的嘗試是:
/\A\S.*\S\z/
但這不會匹配單個字符。
這是,你不應該試圖建立符合一些正則表達式的情形之一的,而是一個正則表達式匹配作爲的補充,並負面使用正則表達式。
re = /\A\s|\s\z/
re !~ " " # => false
re !~ "" # => true
re !~ "sss" # => true
re !~ "s ss" # => true
re !~ " s ss" # => false
使用這個表達式:
\A\S+(?:\s*\S+)*\Z
您可以用this demo的測試字符串部分打,看看它是如何工作。我假設字符串可以跨越多行,因此\A
和\Z
在Ruby中,是這樣的:
if subject =~ /\A\S+(?:\s*\S+)*\Z/
match = $&
說明
\A
錨稱,我們在主題字符串的開頭\S+
匹配一個或多個非空白字符如果你想在開始時允許換行,但只想排除空格字符,可以使用[^ ]+
而不是\S+
(?:\s*\S+)
匹配任意數量的可選空白字符,後跟一個或多個非空格字符*
量詞重申,零次或多次\Z
錨斷言,我們是目標字符串的結尾使用向前看符號,像這樣:
\A(?=\S).*\S\Z
匹配字符串的開始和要求(1),所述第一字符是一個非空白字符和(2)的最後一個字符是一個非空白字符。
匹配:
a
a b
a b c d 1231 e
非匹配:
(只是有一個空格)a
(前導空格)b
(尾隨空格)但你的正則表達式不匹配任何東西。 –
@AvinashRaj從技術上講,你是對的;第一個版本測試了字符串是以空白開始還是結束,但匹配本身是零長度的。我在最後加了'。+',現在它也匹配整個字符串。 –
我不是downvoter,但它會更好,如果你的正則表達式是['\ A(?= \ S)。* \ S \ Z'](http://regex101.com/r/cO9yQ2/4) –
is_ok = lambda do |str|
a, z = str.chars.first, str.chars.last
"#{a}#{z}" =~/|\n|\t/ ? false : true
end
#"more elegant" (yeah dude I rock)
is_ok = lambda {|str| [0, -1].map{|i| str.chars[i] }.join =~/|\n|\t/ ? false : true}
這個答案是唯一一個除了我的答案,給出了期望的結果,但不是那麼優雅。 – sawa
給你要匹配的字符串的一個例子。 – fyz
「a」但不是「a」或「a」 – kempchee
爲什麼不簡單地使用正則表達式呢?第一個和最後一個字符不是「」。在Python中,它將是:'如果s [0]!=''和s [-1]!=''' – sshashank124