如何编写使用一些特殊字符的reg表达式?

时间:2013-05-08 17:03:12

标签: regex tcl

我想写一个reg表达式,它不应该使用除(/,\, - ,[,],<,>,$,〜,!,@,#,:,%)之外的特殊符号。所以我试试:

  if { [regexp {^[\w/-\[\]<>$#~!@#%:\\\/]+$} $name] != 1 } {
        puts "Handle error";
  }

但这不起作用。

例如,对于此类名称IO1??,它不会被视为错误

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:4)

您必须转义角色类中的-或将其放在开头 - 否则将其解释为范围:

regexp {^[\w/\-\[\]<>$#~!@#%:\\\/]+$} $name

regexp {^[-\w/\[\]<>$#~!@#%:\\\/]+$} $name

/\[之间的范围似乎包含?

答案 1 :(得分:2)

我假设你想要两种类型的斜杠/\。您可以尝试^[\w\\\/]+$我尝试了一些examples here

你很亲密,但似乎你只是处理/。你在逃避它时是正确的(需要\/)。如果您添加额外的\\,则还允许\

如果这不起作用,请提供一些您正在使用的传递/失败的复杂字符串的示例,以便我们可以帮助改进正则表达式。

注意:这个答案是关于OP的数字,字母,下划线和斜杠。