【问题标题】:Regex all uppercase with special characters正则表达式全部大写,带有特殊字符
【发布时间】:2012-11-21 20:33:23
【问题描述】:

我有一个正则表达式 '^[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 正则表达式

编辑:我没有指定我想要所有非字母数字字符(包括空格),但在其他人的帮助下,我发现了这个:'^[A-Z-0-9[:punct:][: space:]]+$' 这有什么问题吗?

【问题讨论】:

  • 您是否知道[A0-Z9] 匹配任何数字、任何大写字母以及以下任何字符::;<=>=?@(因为它创建了一个从 0 到 Z 以 ASCII 顺序排列的范围)?跨度>
  • 更新了上面的问题,'^[A-Z-0-9[:punct:][:space:]]+$' 看起来怎么样?
  • 所以你想要除了小写字母以外的所有东西?
  • @DavidRebbe,你只想要所有非空格,还是只想要所有非小写和空格?
  • 我基本上是在尝试找到所有可以包含多个单词的大写字母,其中包含 " ' , . - + = 等字符。我想除了小写之外的所有内容都可以。

标签: mysql regex


【解决方案1】:

试试

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

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

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


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

^[^ ]+$

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

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

^[^ a-z]+$

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

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

^[^a-z]+$

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

【讨论】:

  • 我认为他甚至想要空白。
【解决方案2】:

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

^[^a-z\s]+$

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

^[^a-z]+$

【讨论】:

  • 他也想要空白。否则,我认为就是这样。
【解决方案3】:

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

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

【讨论】:

  • 好的。在这种情况下,不需要转义 ;)(点在字符类中永远不必转义,如果连字符是最后一个字符,则不需要转义)
  • 我的理论是即使你不必逃跑也要逃跑,当你需要逃跑时要记得逃跑。但也许这只是我......
  • 同意@m.buettner 你不需要转义字符类中的特殊字符。
  • 而且最初的字符类(A0-Z9)还是搞砸了;)
  • 我觉得这很奇怪,但我认为这可能是一些我从未见过的奇怪的正则表达式语法。再次修复。
【解决方案4】:

试试下面的正则表达式:

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

【讨论】:

    猜你喜欢
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多