2012-11-21 59 views
1

我有一個正則表達式'^ [A0-Z9] + $',它可以工作,直到它到達帶有'特殊'字符的字符串,如句號或短劃線。正則表達式全部大寫與特殊字符

列表:

UPPER 
lower 
UPPER lower 
lower UPPER 
TEST 
test 
UPPER2.2-1 
UPPER2 

給出:

UPPER 
TEST 
UPPER2 

如何獲得正則表達式忽略非字母數字字符,也因此它包括UPPER2.2-1也?

我這裏有一個鏈接來顯示它的實時':http://www.rubular.com/r/ev23M7G1O3

這是MySQL正則表達式

編輯:我沒有指定我希望所有非字母數字字符(含空格) ,但在這裏的其他人的幫助下,它引導了我:'[AZ-0-9 [:punct:] [:space:]] + $'這有什麼問題嗎?

+1

您是否知道'[A0-Z9]'匹配所有數字,任何大寫字母加上以下任何一項:':; <=> =?@'(因爲它以ASCII順序創建從0到Z的範圍)? –

+0

@ m.buettner,不,我不是。我剛剛開始學習正則表達式,所以我還沒有完全理解它。 – David

+0

更新了上面的問題,'^ [A-Z-0-9 [:punct:] [:space:]] + $'怎麼看? – David

回答

1

您只需要輸入.-即可。從理論上講,你不需要逃避,因爲它們在括號內,但我喜歡在必要時提醒自己逃跑。

'^[A-Z0-9\.\-]+$' 
+1

好的。情況下不需要轉義;)(字符類中的點不必轉義,並且連字符不會如果它們是最後一個字符) –

+0

我的理論即使不需要轉義,也要記住當你需要的時候逃跑,但也許這只是我... – PearsonArtPhoto

+0

同意@ m.buettner你不需要在字符類中轉義特殊字符 – fardjad

4

嘗試

'^[A-Z0-9.-]+$' 

你只需要特殊字符添加到組,可選逃避它們。

此外,如果您選擇不逃避-,請注意它應該放在分組表達式的開始或結尾,以避免它被解釋爲分隔範圍的可能性。


要更新的問題,如果你希望所有非空白,嘗試使用一組如:

^[^ ]+$ 

除了一個空間,將匹配一切。

相反,如果你想要的是所有非空白和非小寫的,你可能會想使用:

^[^ a-z]+$ 

這裏使用的「伎倆」在開幕[後加入了插入符號符號組表達。這表明我們想要否定的比賽。

繼模式,我們也可以將這種「把戲」讓一切小寫字母是這樣的:

^[^a-z]+$ 

我真的不知道上面你想要的3個,但如果沒有別的,這應該作爲你可以用字符類做什麼的一個很好的例子。

+0

我想他甚至想要空白。 –

+0

@ m.buettner那麼在這種情況下,遵循這個模式,我們可以使用'^ [^ a-z] $',除了'[a-z]'之外,其他的都是匹配的。沒有更多來自OP的意見,很難知道。另外,根據Mysql正則表達式的具體情況,他可能會用'\ W作爲''[^ a-z]'的縮寫。 – nixeagle

+0

我想這就是他想說的(除了oyur最後的模式都在字符類之後缺少一個'+');) –

0

嘗試如下的正則表達式:

'^[A0-Z0\\.\\-]+$' 
2

我相信你正在尋找(一個?)大寫單詞比賽,其中詞是相當多的東西。

^[^a-z\s]+$ 

...或者,如果你要允許有更多的空間的話,那麼可能只是

^[^a-z]+$ 
+0

他也想要空格。否則,就是這樣,我想。 –

+0

@ m.buettner - 我不這麼認爲 - 再次讀到這個問題 - 它說OP的當前解決方案與'UPPER','TEST'和'UPPER2'匹配,但是他想匹配'UPPER2.2- 1'以及...我錯過了什麼? –

+0

看看他的「編輯」 –