|
вопрос по шаблону 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) да блин, ценные три буквы "ВСЯ"
теперь все встало на свои места
спасибо
|
|
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший