确定参数是否是正则表达式?

时间:2011-07-14 20:04:05

标签: powershell

我已经创建了一个用于在歌曲上设置mp3标签的Powershell例程,我希望我的一些参数可以作为常规演示或“简单”字符串。具体来说,如果参数可以说是一个正则表达式,那么函数应该尝试使用它来检索它的值;如果它不能,它应该只使用该值。

我刚刚浏览了参数集,并且认为这不适合我,因为我希望灵活处理参数处理;即我想要几个参数独立地这样做。但也许我错了?无论如何,帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

如果你使用的话,你真的不需要try / catch:

 IF ($string -as [regex])

如果强制转换成功,它将返回正则表达式,否则它将返回$ null,因此在IF中用作布尔测试,如果它是有效的正则表达式则为$ true,如果是有效的则为$ false不

话虽这么说,我同意Joey你应该选择一种匹配类型(通配符或正则表达式)并坚持下去。在试图确定正则表达式字符是否符合字面意义时,可能会产生意想不到的后果。

答案 1 :(得分:1)

您可以尝试将字符串转换为正则表达式并查找失败。如果有异常,只需将其用作字符串:

$isParamRegex = $(try { $null = [regex]$Param; $true } catch { $false })

对于参数类型,只需将其设为string并正确记录即可。

但是,我想你可能想要在那里采取不同的路线:

  • 要么使参数始终是正则表达式,以避免使用元字符出现意外。
  • 或者将其设为-like而不是-match的模式,这对用户来说更具可预测性(imho)。
  • 在这两种情况下都提供一个LiteralParam参数,类似于LiteralPath,只是将事物作为普通字符串传递,并按原样处理。