Показать полную графическую версию : [решено] Regex работает непонятно
DJ Mogarych
01-09-2023, 22:51
Привет!
Мне нужно, чтобы регулярка превращала всё в "Скопировано". Почему так работает?
("Скопирован","Скопирована") -replace 'а?$','о'
Скопировано
Скопированоо
если нету "а", просто добавить "о"? Ну.. он и добавляет..
Для этого слова:
"Скопирована" »
Сначала обрабатывается последняя а, которое меняется на о, после обрабатывается ?, т.к. в уже полученном слове а в конце отсутствует, то и добавляется ещё одно о.
Foreigner
02-09-2023, 00:02
Надо просто отделить окончание строки от вариантов: либо последний символ "a", либо нет (но так, чтобы в этом случае он не захватывался):
("Скопирован","Скопирована") -replace '(а|(?<!а))$','о'
Мне нужно, чтобы регулярка превращала всё в "Скопировано". »
Именно всё? Или таки конкретное слово в конце строки?
чтобы предусмотреть возможные ошибки с наибольшим количеством вариантов с конкретным словом, можно сделать примерно так:
("Скопирован","Скопирована","Скопированаа","Скопирайчено","хренькакая","Скопипастчено что-то","оскопили") -replace '\bскопи[^\n ]*\b$','Скопировано'
DJ Mogarych
02-09-2023, 17:16
Именно всё? »
Всё, что в массиве.
Сначала обрабатывается последняя а, которое меняется на о, после обрабатывается ? »
Так вроде бы ? - это один экземпляр предыдущего символа или его отсутствие, почему отдельно обрабатывается?
Всё, что в массиве. »
Задача разовая? Если массив такой, как в первом сообщении, то подойдет шаблон от Foreigner, если что-то ещё будет в нем, то возможны варианты...
Так вроде бы ? - это один экземпляр предыдущего символа или его отсутствие, почему отдельно обрабатывается? »
не совсем... движок регэкспов работает с возвратами и проверками на лучшее совпадение посимвольно, поэтому получается два соответствия и на наличие символа "а", и на пустую строку "", следующую сразу за символом "а", т.к. шаблон "а?", как раз и дает такое двойное соответствие.
Пронаблюдать можно здесь:
https://regex101.com/r/3UqiIK/1 - просто соответствия (Match 1 и Match 2)
https://regex101.com/r/oWo0L5/1 - соответствия с заменой
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.