有人能帮我理解这个正则表达式吗?

时间:2017-07-23 16:55:15

标签: mysql regex

我对MySQL regexp语法有一些了解,但我并不精通。我正在寻找一种方法来构建一个模式,从mysql表中选择包含奇怪字符的所有名称,因为国际输入,例如在n上面有符号的西班牙语名称。

我发现了以下这种模式,我尝试过并且有效。

sass/scss/css

查询是:

[^a-zA-Z0-9@:. \'\-`,\&]

但是,我想了解这种模式是如何构建的以及每个部分的含义。

2 个答案:

答案 0 :(得分:1)

这个想法是[...]之间的任何东西都是一个字符类,它匹配[和]之间集合中的任何单个字符。

将^添加到字符列表的开头意味着(如上所述)它被否定,这意味着它匹配不在集合中的任何字符。把^放在任何地方,但是[...]的开头意味着它只是一个匹配的常规^字符,并且在任何情况下,字符类中的^都不代表行首锚。

范围工作,例如a-z,如果你想在集合中使用文字短划线,你要么把它放在第一位(可能在^之后),要么用\

引用它

编辑:其他特殊字符 - @:等 - 在此上下文中并不特殊,它们只是作为常规字符匹配。

答案 1 :(得分:0)

[A-ZA-Z0-9 @ :. \' -`,\&] - 让我们考虑这种模式的所有重要部分。

[] - 表示匹配[]中任何单个字符的字符类。

[a-zA-Z0-9] - 一个字符(小写或大写),范围为a-z,A-Z或0-9。

[]中存在的所有其他字符与特定单个字符匹配。 单引号"'"和&符号&"\"转义,因为在sql中,它们用于特定目的。

要匹配[]中任何符号 以外的字符的模式,我们会在开头使用否定"^"

因此,正如您所说,您的模式选择了包含其他奇怪字符的mysql表中的所有名称。