Регулярное выражение Powershell для соответствия буквам

Нужен совет по форматированию регулярного выражения в powershell.

У меня есть несколько пользователей AD, у которых есть настраиваемые атрибуты «A», «AA», «B», «BB» и до 5 букв в длину, от A до Z.

Итак, я хочу найти, у какого пользователя есть атрибут «ABAA», а затем создать переменную, которая будет использоваться для определения того, какой путь выбрать. Например. пользователь с атрибутом «AA» войдет в организационную единицу «A».

if ($customattribute -match '^[a-z]{2}[^a-z]')

Я предполагаю, что это просто соответствует случайным буквам. Каким будет форматирование для «AA» или «BBB»?


person kkv78    schedule 03.09.2018    source источник
comment
Регулярное выражение, которое вы могли бы использовать, было бы ^(ABAA). Аналогично для других возможностей.   -  person Michael B.    schedule 03.09.2018
comment
Ваше объяснение очень непонятно. Какой узор вы ищете? Какая именно связь между значением атрибута и OU?   -  person marsze    schedule 03.09.2018
comment
Customattribute пользователей определяет, в какую OU они должны быть помещены. Таким образом, пользователь со значением ABAA помещается в OU_A - SubOU_B - SubOU_A - SubOU_A.   -  person kkv78    schedule 03.09.2018
comment
В этом случае я бы создал хеш-таблицу, сопоставляющую возможные строки с соответствующими путями OU, а затем просто выполнял поиск в этой хэш-таблице.   -  person Ansgar Wiechers    schedule 03.09.2018
comment
Пожалуйста, покажите ваш текущий код. Обратите внимание, что для соответствия AA или BBB в начале строки вы можете использовать "^(?:AA|BBB)", а если вам нужно соответствие с учетом регистра, используйте -cmatch вместо -match.   -  person Wiktor Stribiżew    schedule 03.09.2018


Ответы (2)


Это регулярное выражение лучше соответствует вашему описанию данных:

if ($customattribute -match '^[A-Z]{2,5}$')

Ваше регулярное выражение будет соответствовать двум строчным буквам в начале строки, а затем другому символу, который может быть чем угодно, кроме строчной буквы - похоже, это не то, что вам нужно.

person Tim Pietzcker    schedule 03.09.2018

Я подумал, что это лучше всего удовлетворит мои потребности

if ($customattribute -match '^A[A-Z]') 

Затем я получаю всех пользователей с пользовательскими атрибутами, такими как AA, AB и ACA.

AA
AB
ACA

Но как я могу ограничить регулярное выражение только двумя буквами, чтобы получить все комбинации из двух букв, начинающиеся с A?

@редактировать

Ну я понял:

if ($customattribute -match '^A[A-Z]{1}$') # 2 letters

if ($customattribute -match '^A[A-Z]{2}$') # 3 letters
person kkv78    schedule 03.09.2018