|
вопрос по шаблону 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) да блин, ценные три буквы "ВСЯ"
теперь все встало на свои места спасибо |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |