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:] ]+$' 这有什么问题吗?

4

4 回答 4

4

尝试

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

您只需要将特殊字符添加到组中,可选择转义它们。

此外,如果您选择不转义-,请注意它应该放在分组表达式的开头或结尾以避免它可能被解释为分隔范围的机会。


对于您更新的问题,如果您想要所有非空白,请尝试使用以下组:

^[^ ]+$

它将匹配除空格之外的所有内容。

相反,如果您想要的是所有非空白和非小写字母,您可能会想要使用:

^[^ a-z]+$

[这里使用的“技巧”是在组表达式的开头之后添加一个插入符号。这表明我们想要匹配的否定

按照该模式,我们还可以应用这个“技巧”来获取小写字母之外的所有内容,如下所示:

^[^a-z]+$

我不确定您想要以上 3 个中的哪一个,但如果不出意外,这应该是您可以使用字符类做什么的一个很好的例子。

于 2012-11-21T20:37:44.423 回答
3

我相信您正在寻找(一个?)大写单词匹配,其中单词几乎是任何东西。

^[^a-z\s]+$

...或者如果您想允许更多带有空格的单词,那么可能只是

^[^a-z]+$
于 2012-11-21T21:04:35.543 回答
1

你只需要放入.and -。理论上,你不需要逃跑,因为它们在括号内,但我想提醒自己在必须逃跑的时候逃跑。

'^[A-Z0-9\.\-]+$'
于 2012-11-21T20:35:31.703 回答
0

尝试如下正则表达式:

   '^[A0-Z0\\.\\-]+$'
于 2012-11-21T20:42:38.837 回答