Что нового

StringRegExp , Замена фрагментов строки по шаблону

Автор
G

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
amel27 сказал(а):
2. * - любое количество символов заданного класса ([^|]), без него шаблон будет обозначать: обязательное наличие ОДНОГО символа заданного класса (не разделитель)

А почему тогда не " ? " ?
Это было бы логичней (ведь вначале и конце строки разделитель " | " отсутствует ).



Добавлено:
Сообщение автоматически объединено:

И почему работает без экранирования " | " ?
 

amel27

Продвинутый
Сообщения
146
Репутация
55
gregaz сказал(а):
А почему тогда не " ? " ?
Это было бы логичней (ведь вначале и конце строки разделитель " | " отсутствует ).

"?" обозначает один, но необязательный символ, а если в слове перед искомой фразой ("бра") два и более символов?.. все эти символы не будут включены в замену
 
Автор
G

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
И в чем небходимость символа "+" в:
Код:
$r ="[^|]*" & $f & "[^|]*+"



Добавлено:
Сообщение автоматически объединено:

gregaz [?]
И почему работает без экранирования " | " ?
 

amel27

Продвинутый
Сообщения
146
Репутация
55
gregaz сказал(а):
И в чем небходимость символа "+"

обычная "*" пытается применить остаток регулярного выражения для КАЖДОГО отбираемого символа, "*+" сначала пропускает все подходящие под условие символы и только после этого продолжает дальнейшую проверку... поэтому, применять "*+" нужно аккуратно - в начале выражения оно приведет к запуску проверки "бра" только в конце каждого слова, т.е. всегда будет давать отрицательный результат
 
Автор
G

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
amel27 Еще раз спасибо за разъяснения.
Интересно , что Regex Coach ругается на недопустимость сочетания *+ , но вживую все работает,а самое главное мне многое стало понятно .
Тему закрываю
 
Верх