Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Regex работает непонятно

Ответить
Настройки темы
PowerShell - [решено] Regex работает непонятно

Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6585
Благодарности: 1511


Конфигурация

Профиль | Отправить PM | Цитировать


Привет!

Мне нужно, чтобы регулярка превращала всё в "Скопировано". Почему так работает?
Код: Выделить весь код
("Скопирован","Скопирована") -replace 'а?$','о'
Скопировано
Скопированоо

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 22:51, 01-09-2023

 

Ветеран


Сообщения: 2714
Благодарности: 252

Профиль | Отправить PM | Цитировать


если нету "а", просто добавить "о"? Ну.. он и добавляет..

-------
Оснащение дурдомов компьютерами идёт полным ходом.
Об этом можно судить по комментариям в интернете.


Отправлено: 23:33, 01-09-2023 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для NickM

Ветеран


Contributor


Сообщения: 4449
Благодарности: 1053

Профиль | Отправить PM | Цитировать


Для этого слова:
Цитата DJ Mogarych:
"Скопирована" »
Сначала обрабатывается последняя а, которое меняется на о, после обрабатывается ?, т.к. в уже полученном слове а в конце отсутствует, то и добавляется ещё одно о.
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:52, 01-09-2023 | #3


Ветеран


Сообщения: 1756
Благодарности: 965

Профиль | Цитировать


Надо просто отделить окончание строки от вариантов: либо последний символ "a", либо нет (но так, чтобы в этом случае он не захватывался):

Код: Выделить весь код
("Скопирован","Скопирована") -replace '(а|(?<!а))$','о'

Последний раз редактировалось Foreigner, 02-09-2023 в 00:09.

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:02, 02-09-2023 | #4


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1181
Благодарности: 495

Профиль | Отправить PM | Цитировать


Цитата DJ Mogarych:
Мне нужно, чтобы регулярка превращала всё в "Скопировано". »
Именно всё? Или таки конкретное слово в конце строки?
чтобы предусмотреть возможные ошибки с наибольшим количеством вариантов с конкретным словом, можно сделать примерно так:
Код: Выделить весь код
("Скопирован","Скопирована","Скопированаа","Скопирайчено","хренькакая","Скопипастчено что-то","оскопили") -replace '\bскопи[^\n ]*\b$','Скопировано'

-------
scio me nihil scire. Ѫ


Отправлено: 10:25, 02-09-2023 | #5


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6585
Благодарности: 1511

Профиль | Отправить PM | Цитировать


Цитата YuS_2:
Именно всё? »
Всё, что в массиве.

Цитата NickM:
Сначала обрабатывается последняя а, которое меняется на о, после обрабатывается ? »
Так вроде бы ? - это один экземпляр предыдущего символа или его отсутствие, почему отдельно обрабатывается?

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 17:16, 02-09-2023 | #6


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1181
Благодарности: 495

Профиль | Отправить PM | Цитировать


Цитата DJ Mogarych:
Всё, что в массиве. »
Задача разовая? Если массив такой, как в первом сообщении, то подойдет шаблон от Foreigner, если что-то ещё будет в нем, то возможны варианты...

Цитата DJ Mogarych:
Так вроде бы ? - это один экземпляр предыдущего символа или его отсутствие, почему отдельно обрабатывается? »
не совсем... движок регэкспов работает с возвратами и проверками на лучшее совпадение посимвольно, поэтому получается два соответствия и на наличие символа "а", и на пустую строку "", следующую сразу за символом "а", т.к. шаблон "а?", как раз и дает такое двойное соответствие.
Пронаблюдать можно здесь:
https://regex101.com/r/3UqiIK/1 - просто соответствия (Match 1 и Match 2)
https://regex101.com/r/oWo0L5/1 - соответствия с заменой

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 02-09-2023 в 20:53.

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:46, 02-09-2023 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Regex работает непонятно

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - Regex, найти несколько значений и сохранить в txt hirurgrrr Скриптовые языки администрирования Windows 4 25-09-2019 20:44
PowerShell - [блог] Регулярные выражения – Regex Xaegr Скриптовые языки администрирования Windows 0 10-04-2010 05:30
Редактор RegEX XCodeR Вебмастеру 7 07-02-2006 18:52
perl regex не получается сделать :( lcat Программирование и базы данных 2 07-06-2004 06:44
regex в mvс Guest Программирование и базы данных 1 16-01-2004 10:27




 
Переход