我对MySQL regexp语法有一些了解,但我并不精通。我正在寻找一种方法来构建一个模式,从mysql表中选择包含奇怪字符的所有名称,因为国际输入,例如在n上面有符号的西班牙语名称。
我发现了以下这种模式,我尝试过并且有效。
sass/scss/css
查询是:
[^a-zA-Z0-9@:. \'\-`,\&]
但是,我想了解这种模式是如何构建的以及每个部分的含义。
答案 0 :(得分:1)
这个想法是[...]之间的任何东西都是一个字符类,它匹配[和]之间集合中的任何单个字符。
将^添加到字符列表的开头意味着(如上所述)它被否定,这意味着它匹配不在集合中的任何字符。把^放在任何地方,但是[...]的开头意味着它只是一个匹配的常规^字符,并且在任何情况下,字符类中的^都不代表行首锚。
范围工作,例如a-z,如果你想在集合中使用文字短划线,你要么把它放在第一位(可能在^之后),要么用\
引用它编辑:其他特殊字符 - @:等 - 在此上下文中并不特殊,它们只是作为常规字符匹配。
答案 1 :(得分:0)
[A-ZA-Z0-9 @ :. \' -`,\&] - 让我们考虑这种模式的所有重要部分。
[]
- 表示匹配[]中任何单个字符的字符类。
[a-zA-Z0-9]
- 一个字符(小写或大写),范围为a-z,A-Z或0-9。
[]
中存在的所有其他字符与特定单个字符匹配。
单引号"'"
和&符号&
由"\"
转义,因为在sql中,它们用于特定目的。
要匹配[]
中任何符号 以外的字符的模式,我们会在开头使用否定"^"
。
因此,正如您所说,您的模式选择了包含其他奇怪字符的mysql表中的所有名称。