|
|
|
Кто на регулярных выражениях собаку съел? Подскажите...
|
|||
|---|---|---|---|
|
#18+
White OwlОшибался :) Уел Но исходной задачи это увы не решает Потому что как только мы добавим квантификатор на произвольный символ, он скушает ZZZ и его не будет. Велеть ему не кушать подстроку мы не умеем, а все базирующееся на символьных наборах будет частным решением. Или я не прав ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2007, 11:17 |
|
||
|
Кто на регулярных выражениях собаку съел? Подскажите...
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. что то я не придумал случая когда оно не сработает и что значит частное решение? на место AAA BBB и ZZZ можно подставить любые другие строки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2007, 12:57 |
|
||
|
Кто на регулярных выражениях собаку съел? Подскажите...
|
|||
|---|---|---|---|
|
#18+
Tellurна место AAA BBB и ZZZ можно подставить любые другие строки Угум, а [^Z] в регулярном выражении в RunTime-е будешь строить ??? А если BBB и ZZZ (те самые которые любые строки) одинаковый префикс имеют, как выражение выглядить будет ??? Например: AAA = qwerty BBB = abcd ZZZ = abef Частным считаю решение, приниципиально зависимое от входных данных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2007, 13:03 |
|
||
|
Кто на регулярных выражениях собаку съел? Подскажите...
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)Но исходной задачи это увы не решает Потому что как только мы добавим квантификатор на произвольный символ, он скушает ZZZ и его не будет. Велеть ему не кушать подстроку мы не умеем, а все базирующееся на символьных наборах будет частным решением. Или я не прав ?Почти прав. Произвольный символ не скушает ZZZ а сместит его. Любой шаблон содержащий отрицание слова на самом деле означает "и в строке есть подстрока которая не равна ZZZ". Поэтому если у нас есть AAAxZZZ и мы проверяем на (ZZZ){0} подстрока xZ уже удовлетворяет условию, и все выражение становится правдой. В общем, до тех пор пока у нас в строке нету произвольных символов отрицание будет работать, как только между отрицательным и 'положительным' шаблоном появляется произвольный символ - отрицание работать перестает.... Поэтому обычно задачи типа "проверить что в строке между словами AAA и BBB нету слова ZZZ" решаются через два условия. Что-то в духе: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2007, 18:00 |
|
||
|
Кто на регулярных выражениях собаку съел? Подскажите...
|
|||
|---|---|---|---|
|
#18+
Tellur Код: plaintext 1. что то я не придумал случая когда оно не сработаета.... это мысль. Запретить первый символ слова или разрешить первый символ после которого не идет конец слова. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2007, 18:11 |
|
||
|
Кто на регулярных выражениях собаку съел? Подскажите...
|
|||
|---|---|---|---|
|
#18+
Надо подумать над идеей... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2007, 18:18 |
|
||
|
Кто на регулярных выражениях собаку съел? Подскажите...
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) Угум, а [^Z] в регулярном выражении в RunTime-е будешь строить ??? А если BBB и ZZZ (те самые которые любые строки) одинаковый префикс имеют, как выражение выглядить будет ??? Например: AAA = qwerty BBB = abcd ZZZ = abef Частным считаю решение, приниципиально зависимое от входных данных то же самое можно сказать и про AAA, BBB их же в током случает тоже "RunTime-е будешм строить" не вижу нечего сложног сделать [^Z], т.к. Z - это всего лишь первая буква слова ZZZ. А то так получается надо написать регулярное выражение которое не зная слова AAA должно определить что с него должна начинаться подстрока, должна оканчиваться на некое слово BBB которое тоже в выражении не фигурирует. Фантастика, похоже регулярные выражения научились читать мысли ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2007, 07:04 |
|
||
|
Кто на регулярных выражениях собаку съел? Подскажите...
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) А если BBB и ZZZ (те самые которые любые строки) одинаковый префикс имеют, как выражение выглядить будет ??? Например: AAA = qwerty BBB = abcd ZZZ = abef точно так же и будет выглядеть Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2007, 07:08 |
|
||
|
Кто на регулярных выражениях собаку съел? Подскажите...
|
|||
|---|---|---|---|
|
#18+
ну да, правда вместо "+" стоит "*" поставить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2007, 07:10 |
|
||
|
Кто на регулярных выражениях собаку съел? Подскажите...
|
|||
|---|---|---|---|
|
#18+
White OwlПоэтому обычно задачи типа "проверить что в строке между словами AAA и BBB нету слова ZZZ" решаются через два условия. Что-то в духе: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Вы только что повторили мою мысль относительно лохматой Бабушки (см. выше по треду) Задача не решается в рамках универсального регулярного выражения Ясный пень, что она легко решается за этими рамками ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2007, 10:07 |
|
||
|
Кто на регулярных выражениях собаку съел? Подскажите...
|
|||
|---|---|---|---|
|
#18+
Tellurточно так же и будет выглядеть Если не сложно, будь так добр написать универсальное Perl-овое регулярное выражение, решающее задачу. Конкретные значения подстрок должны интерполироваться из $1, $2 и $3 соотвественно. Именно выражение, а не скажем кусок кода, генерирующее выражение, решающее частную задачу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2007, 10:11 |
|
||
|
Кто на регулярных выражениях собаку съел? Подскажите...
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) Если не сложно, будь так добр написать универсальное Perl-овое регулярное выражение, решающее задачу. Конкретные значения подстрок должны интерполироваться из $1, $2 и $3 соотвественно. Именно выражение, а не скажем кусок кода, генерирующее выражение, решающее частную задачу Теперь я, кажется, понял о чем речь. Речь о том что Perl умеет подставлять строки в регулярные выражения из "$1, $2 и $3" К сожалению на Perl не пишу. Пишу на PHP. там в стандарных функциях preg_match() такой возможности нет. preg_match() оперирует одной входной строкой, и на выходе получаем массив совпадений. Так что вся ваша универсальность работает опять же не везде. не знаю как дело обстоит с C# и .Net ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2007, 10:31 |
|
||
|
Кто на регулярных выражениях собаку съел? Подскажите...
|
|||
|---|---|---|---|
|
#18+
Tellur Так что вся ваша универсальность работает опять же не везде. не знаю как дело обстоит с C# и .Net Как я уже сказал, все это обсуждалово не более чем игра ума (поскольку есть простой способ решить задачу вне регулярного выражения). Поскольку игра ума хочется чистого решения. Есть чистое решение, подставляющее переменные в выражение (и для PHP кстати). Нет чистого решения, подставляющего результаты обработки этих переменных Ну и вопросы эффективности. Все эти игры могут существенно просадить производительность, по сравнению с простым и незамысловатым кондовым решением ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2007, 10:37 |
|
||
|
Кто на регулярных выражениях собаку съел? Подскажите...
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)Конкретные значения подстрок должны интерполироваться из $1, $2 и $3 соотвественно. Именно выражение, а не скажем кусок кода, генерирующее выражение, решающее частную задачубоюсь, в пыхе (возможно и в перле) выражение "$var" является не строкой, а именно куском кода, генерирующего строку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2007, 11:34 |
|
||
|
Кто на регулярных выражениях собаку съел? Подскажите...
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) Ну и вопросы эффективности. Все эти игры могут существенно просадить производительность, по сравнению с простым и незамысловатым кондовым решением Согласен. каждой технологии свое место. И использование регулярных выражений здесь не очень то уместно. Но это надо решать на этапе постановки задачи. Я же просто пытался предложить решение в рамках уже поставленой задачи (вопрос был о решении с помощью регулярных выражений) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2007, 11:34 |
|
||
|
Кто на регулярных выражениях собаку съел? Подскажите...
|
|||
|---|---|---|---|
|
#18+
maXmo Gluk (Kazan)Конкретные значения подстрок должны интерполироваться из $1, $2 и $3 соотвественно. Именно выражение, а не скажем кусок кода, генерирующее выражение, решающее частную задачубоюсь, в пыхе (возможно и в перле) выражение "$var" является не строкой, а именно куском кода, генерирующего строку. Это вопрос теологический, но при изменении значения переменной регулярное выражение разумеется будет перекомпилировано ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2007, 11:54 |
|
||
|
Кто на регулярных выражениях собаку съел? Подскажите...
|
|||
|---|---|---|---|
|
#18+
Ты ведь именно теологический вопрос поднял. А регексп будет компилиться ровно так, как напишешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2007, 12:06 |
|
||
|
Кто на регулярных выражениях собаку съел? Подскажите...
|
|||
|---|---|---|---|
|
#18+
maXmoТы ведь именно теологический вопрос поднял. А регексп будет компилиться ровно так, как напишешь. теологический, вопрос поднял автор топика :) Задача решается проще и эффективнее без помощи регулярных выражений. Решение White Owl разумеется эффективнее того что предложил я, поскольку поиск на минимальном квантификаторе простой строки (без конструкции выбора) эффективно оптимизируется BM-поиском. Собственно с этого места тему можно считать закрытой, дальше идет теология ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2007, 12:30 |
|
||
|
Кто на регулярных выражениях собаку съел? Подскажите...
|
|||
|---|---|---|---|
|
#18+
Tellur Код: plaintext 1. что то я не придумал случая когда оно не сработает и что значит частное решение? на место AAA BBB и ZZZ можно подставить любые другие строки Кстать, не работает ни фига ни так: Код: plaintext 1. 2. 3. 4. 5. ни так: Код: plaintext 1. 2. 3. 4. 5. Почему не работает разбираться было лениво, господа теоретики ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2007, 12:34 |
|
||
|
Кто на регулярных выражениях собаку съел? Подскажите...
|
|||
|---|---|---|---|
|
#18+
Вдогон Gluk (Kazan)Почему не работает разбираться было лениво, господа теоретики Могу предположить что патамушта DDD Давайте все же решать поставленные задачи, а не те которые проще решить (оставляя "более общее решение в качестве упражнения для читателя"). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2007, 12:37 |
|
||
|
Кто на регулярных выражениях собаку съел? Подскажите...
|
|||
|---|---|---|---|
|
#18+
пробел выводит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2007, 12:38 |
|
||
|
Кто на регулярных выражениях собаку съел? Подскажите...
|
|||
|---|---|---|---|
|
#18+
так: Код: plaintext 1. 2. 3. 4. 5. тоже не работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2007, 12:38 |
|
||
|
Кто на регулярных выражениях собаку съел? Подскажите...
|
|||
|---|---|---|---|
|
#18+
maXmoпробел выводит А должно DDD ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2007, 12:40 |
|
||
|
Кто на регулярных выражениях собаку съел? Подскажите...
|
|||
|---|---|---|---|
|
#18+
имхо, правильно пробел выводит, попробуй пробел после ААА стереть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2007, 12:41 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=34936428&tid=1345299]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
195ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 240ms |
| total: | 512ms |

| 0 / 0 |
