Имя: Пароль:
IT
 
вопрос по шаблону regexp
0 kittystark
 
15.12.11
13:32
дана строка "01 название товара|код=12345"

по шаблону "^\d{2}\s+(.+)(?:\|код=)" этой строке через VBScript.RegExp делаем replace на "$1"
в результат записывается "название товара12345"
тоже самое и для шаблона "^\d{2}\s+(\D+)(?:\|код=)"

для шаблона "^\d{2}\s+(.+)(?:\|код=).*" все пучком, но уже достало эти .* каждый раз указывать и в начале и в конце большинства моих шаблонов

вот не могу понять, с какого в $1 для обоих случаев попадает весь "хвост" строки ??? может кто объяснит ? а то "этот борщ меня просто бесит"(с)

игры с global, multiline ничего не дают
1 sergeante
 
15.12.11
15:09
(0) попробуй нежадный модификатор "?"

"^\d{2}\s+(.+?)(?:\|код=)"
2 sergeante
 
15.12.11
15:10
иначе конструкшн (.+) пытается захавать как можно больше символов и упирается в "просмотр вперёд"
3 sergeante
 
15.12.11
15:13
точнее не в "просмотр вперёд" а в конец строки

вот так попробуй "^\d{2}\s+(.+?)\|"
4 Fragster
 
гуру
15.12.11
15:13
это из-за конца строки...
походу сделай
^\d{2}\s+(.+)(код=){0,1}
5 sergeante
 
15.12.11
15:24
(4) не, не прокатит

вот так ещё вроде работает
^\d{2}\s+([^|]+)
6 Fragster
 
гуру
15.12.11
15:40
а, ю* нужна для того, чтобы заменить... делай не через замену, а через поиск
7 kittystark
 
15.12.11
16:46
не катят эти шаблоны... та же песдня...
но как только к ним добавляем .* все как надо

вот вопрос из той же оперы: почему для строки  abcXYZdef
шаблон (XYZ) по замене $1 дает abcXYZdef
шаблон .(XYZ). по замене $1 дает abXYZef
шаблон ..(XYZ).. по замене $1 дает aXYZf

ведь XYZ ну никак, даже частями, не совпадают с abc и def, а их огрызки прилепляются
и только ...(XYZ)... c эквивалентым ему .*(XYZ).* дает ожидаемый результат XYZ ?

вижу закономерность, но не понимаю почему оно именно так работает
8 Fragster
 
гуру
15.12.11
16:46
(7) нафиг замену, делай поиск только нужной инфы
9 Fragster
 
гуру
15.12.11
16:48
замена работает так, потому что чтобы осталось только то, что тебе нужно - нужно, чтобы ВСЯ строка соответствовала паттерну. иначче заменится только то, что соответствует паттерну, что верно.

точно также, как СтрЗаменить работает, только не с обычными строками, а с паттернами. ну и $1, это же не просто так - это "первое подсоответствие", т.е. что в скобочках.
10 kittystark
 
15.12.11
17:21
(9) да блин, ценные три буквы "ВСЯ"
теперь все встало на свои места
спасибо
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.