Определить, является ли параметр регулярным выражением? - PullRequest
0 голосов
/ 15 июля 2011

Я создал подпрограмму Powershell для установки mp3-тегов на песни, где я хотел бы, чтобы некоторые из моих параметров действовали либо как обычное выражение, либо как «простая» строка.В частности, если можно сказать, что параметр работает как регулярное выражение, функция должна попытаться использовать его для получения своего значения;если это невозможно, следует просто использовать это значение.

Я только что просмотрел наборы параметров и не думаю, что это подойдет мне, так как я хочу быть гибким в обработке параметров;т.е. я бы хотел, чтобы несколько параметров действовали независимо друг от друга.Но может я ошибаюсь в этом?В любом случае, помощь будет оценена.

Ответы [ 2 ]

2 голосов
/ 15 июля 2011

На самом деле вам не нужна попытка / отлов, если вы используете:

 IF ($string -as [regex])

Если приведение выполнено успешно, оно вернет регулярное выражение, если нет, то вернет $ null, поэтому при использовании в качестве логического теста в IF оно будет $ true, если оно является действительным регулярным выражением, и $ false, если оно выполнено. нет.

При этом я бы согласился с Джои, что вам следует выбрать один тип совпадения (подстановочный знак или регулярное выражение) и придерживаться этого. Существует слишком большой потенциал непреднамеренных последствий при попытке определить, должен ли метасимвол регулярного выражения совпадать буквально или нет.

1 голос
/ 15 июля 2011

Вы можете попробовать преобразовать строку в регулярное выражение и найти ошибки.Если есть исключение, просто используйте его как строку:

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

Что касается типа параметра, просто сделайте его string и документируйте его соответствующим образом.

Однако я бы хотелскажем, вы можете пойти по другому пути:

  • Либо сделайте аргумент всегда регулярным выражением, чтобы избежать неожиданностей с метасимволами.
  • Или вместо этого сделайте шаблон для -like-match, что немного более предсказуемо для пользователей (imho).
  • В обоих случаях предоставьте аргумент LiteralParam, похожий на LiteralPath, чтобы просто передавать вещи как простые строки, которые обрабатываются как таковые.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...