0

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

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

但这不起作用。

例如对于这样IO1??的名称,它不会被视为错误

有人可以帮忙吗?

4

2 回答 2

4

您必须-在字符类中转义或将其放在开头 - 否则它将被解释为一个范围:

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

或者

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

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

于 2013-05-08T17:32:00.340 回答
2

我假设你想要两种类型的斜杠/\. 你可以试试^[\w\\\/]+$在这里尝试了一些例子

你很接近,但似乎你只是在处理/。你逃避它是正确的(需要\/)。如果你添加额外的\\,你也允许\

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

注意:这个答案是针对 OP 的,仅涉及数字、字母、下划线和斜杠。

于 2013-05-08T17:06:38.850 回答