2012-11-21 60 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

看看他的“编辑” –