| 
			| 
					
						| nikedeforest | 
								|  | «  : 03-07-2007 11:24 »  |  | 
 
 Есть строка типа some of text|~|some text|~||~|other text|~||~|//~//more text//~//|~| и т.д. Пытаюсь сообразить шаблон, который бы мне возвращал только текст между |~| |~| или между |~|//~// //~//|~| при этом сами разделители мне не нужны Вот вокруг чего я сейчас танцую ((?:|~|(//~//)?)(.*)(?:(//~//)?|~|))+?
Возвращается строка целиком Где моя ошибка? На всякий случай тестовый код MatchCollection an = Regex.Matches(/*"|~|//~//ert//~//|~||~|erttt|~|"*/"some of text|~|some text|~||~|other text|~||~|//~//more text//~//|~|", "((?:|~|(//~//)?)(.*)(?:(//~//)?|~|))+?", RegexOptions.ExplicitCapture);Match a = an[0];
 
GroupCollection gr = a.Groups; Group g = gr[2]; |  
						| 
								|  |  
								| « Последнее редактирование: 03-07-2007 11:27 от nikedeforest » |  Записан | 
 
 ещё один вопрос ... |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #1 : 03-07-2007 19:17 »  |  | 
 
 nikedeforest, попробуй первый блок тоже "?:" сделатьКстати, а поддерживают ли эти регулярные выражения "заглядывание", как в perl? Блоки типа (?= ) и (?<= )
 |  
						| 
								|  |  
								| « Последнее редактирование: 03-07-2007 19:20 от RXL » |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| nikedeforest | 
								|  | « Ответ #2 : 04-07-2007 05:15 »  |  | 
 
 Сейчас попробую."заглядывания" поддерживают
 |  
						| 
								|  |  
								|  |  Записан | 
 
 ещё один вопрос ... |  |  | 
	| 
			| 
					
						| nikedeforest | 
								|  | « Ответ #3 : 04-07-2007 05:56 »  |  | 
 
 имелось ввиду  (?:(?:|~|(//~//)?)(.*)(?:(//~//)?|~|))+?
 Эффект тот же |  
						| 
								|  |  
								|  |  Записан | 
 
 ещё один вопрос ... |  |  | 
	| 
			| 
					
						| nikedeforest | 
								|  | « Ответ #4 : 04-07-2007 08:07 »  |  | 
 
 Вот еще пример строка some of text|~|some text|~||~|other text|~||~|//~//more text//~//|~|cbcvbcvbcb some ert some
шаблон  результат of text|~|some text|~||~|other text|~||~|//~//more text//~//|~|cbcvbcvbcb some ert
А хочу, чтоб было Пробовал ((?<=some).+(?=some))?? - результат пустая строка  ((?<=some).+(?=some))+? - результат тот же, что в шаблоне, который я привел самым первым |  
						| 
								|  |  
								| « Последнее редактирование: 04-07-2007 08:19 от nikedeforest » |  Записан | 
 
 ещё один вопрос ... |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #5 : 04-07-2007 10:00 »  |  | 
 
 Я думаю, тебе не match надо, а split - так проще будет.
 Попробуй этим резать:
 
 (?://~//)?\|~\|(?://~//)?
 
 
 |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| nikedeforest | 
								|  | « Ответ #6 : 04-07-2007 12:06 »  |  | 
 
 мне как бы не разбить же надо. Требуется получить то, что обрамлено определенными символами. А это, сам понимаешь не совсем тоже самое. Но походу дела, придется этим воспользоваться, потому какт я уже не знаю что придумать, чтобы MAtch не склеивал результат. |  
						| 
								|  |  
								|  |  Записан | 
 
 ещё один вопрос ... |  |  | 
	| 
			| 
					
						| Finch 
								СпокойныйАдминистратор    Offline 
								Пол:    
								Пролетал мимо
								
								
								
								
								
							 | 
								|  | « Ответ #7 : 04-07-2007 12:21 »  |  | 
 
 Никита, а нельзя вставлять какой то определенный символ также? Например "|". А потом можно сделать split строки. |  
						| 
								|  |  
								|  |  Записан | 
 
 Не будите спашяго дракона.              Джаффар (Коша) |  |  | 
	| 
			| 
					
						| nikedeforest | 
								|  | « Ответ #8 : 04-07-2007 12:43 »  |  | 
 
 Виктор, сплитом можно сделать. Варианты как сделать иначе есть, RXL предложил неплохой вариант, просто регулярными выражениями было бы правильнее и надежнее и не казалось мне тогда, что я так и не смогу победить эту проблему. Удивительно, складывается впечатление, что я первый, кто пытается преодолеть "жадность" регулярных выражений, у кого не спрашивал, кто работает на .НЕТ, никто не знает.Сейчас-то проблема в том, что в результате работы Matches я получаю текст не между каждыми |~|, а между первым и последним в строке. И никак это не могу я побороть.
 |  
						| 
								|  |  
								| « Последнее редактирование: 04-07-2007 12:46 от nikedeforest » |  Записан | 
 
 ещё один вопрос ... |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #9 : 04-07-2007 15:03 »  |  | 
 
 Тогда так попробуй:
 \|~\|(?://~//)?(.*?)(?://~//)?\|~\|
 
 
 |  
						| 
								|  |  
								| « Последнее редактирование: 04-07-2007 15:05 от RXL » |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| nikedeforest | 
								|  | « Ответ #10 : 08-07-2007 17:50 »  |  | 
 
 Хм, перед отъездом проверил, но не успел тебе задать вопрос. ТО, что ты сейчас предлагаешь-очень хороший вариант, по крайней мере лучший из имеющихся.  Возвращается именно группа текста внутри |~|  |~|. Правда вместе с этим возвращается и |~|. Я сразу что сделал, так это попытался организовать группу (?  , но это не помогает абсолютно, не оказывая никакого влияния вообще. Я не понимаю почему, если не сложно объясни. В принципе обрамление убрать из итога не сложно, мне просто интересно знать почему не работает конструкция (?  , в этом варианте, может из-за этого и предыдущие варианты не работали  |  
						| 
								|  |  
								|  |  Записан | 
 
 ещё один вопрос ... |  |  | 
	| 
			| 
					
						| nikedeforest | 
								|  | « Ответ #11 : 09-07-2007 08:45 »  |  | 
 
 И уж тем более я не понимаю смысл необязательности центральной группы. Почему с ним именно все так как надо. Как-то все за уши получается притянуто   , в смысле не логично для меня. |  
						| 
								|  |  
								|  |  Записан | 
 
 ещё один вопрос ... |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #12 : 09-07-2007 17:51 »  |  | 
 
 nikedeforest, тебе надо читать доку по ф-иям.Для PCRE в C, Perl и PHP - возвращаются массивы, где первый элемент - что захватил шаблон, следующие - что захватили блоки.
 
 |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| nikedeforest | 
								|  | « Ответ #13 : 09-07-2007 18:21 »  |  | 
 
 В .НЕТ также. Я хотел, чтобы шаблон сразу захватил только то, что между разделителями, т.е. была бы одна группа. А так получилось две группы. |  
						| 
								|  |  
								|  |  Записан | 
 
 ещё один вопрос ... |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #14 : 09-07-2007 18:55 »  |  | 
 
 Группа одна, а остальное - особенность ф-ий. |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| Malaja | 
								|  | « Ответ #15 : 18-10-2007 14:35 »  |  | 
 
 Господа, простите за тупость, но я никак не пойму, как применять этот самый Regex.Match... Пример - в проекте соит:             Match m  = Regex.Match( vlanId, @"^[0-9a-fA-F]{3}" );if( m.Length < 1 )
 {
 return false;
 }
 
 
Что это значит? Что он ищет? Что означает значок "^"? Ну и т.д.... Я синтаксис не пойму!!! |  
						| 
								|  |  
								|  |  Записан | 
 
 холоднокровней, Маня, Ви не на работе---------------------------------------
 четкое определение сущности бытия:
 - А мы в прошлом или в будущем?- спросила Алиса.
 - Мы в жопе, - ответил кролик.
 - А "жопа" - это настоящее? - спросила Алиса.
 - А "жопа" - это у нас символ вечности.
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #16 : 18-10-2007 15:18 »  |  | 
 
 Malaja, все довольно просто:
 ^ - указатель позиции на начало строки;
 [0-9a-fA-F] - задание класса символов (здесь: все варианты шестнадцатеричных цифр);
 {3} - квантификатор (здесь: ровно три символа).
 
 Смысл выражения: в самом начале строки должно быть три шестнадцатеричных цифры.
 
 |  
						| 
								|  |  
								| « Последнее редактирование: 18-10-2007 15:20 от RXL » |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| Malaja | 
								|  | « Ответ #17 :  18-10-2007 15:31 »   |  | 
 
 Ром, спасибочки! Но это еще не все    А что тогда ищется тут: Regex.Match(commands, "^/L:([a-zA-Z]*-[a-zA-Z]*)(-[a-zA-Z]*)*$", RegexOptions.Compiled); 
 То, что я теперь могу расшифровать: в начале строки д.б. /Л:, а за ним маленькая или большая буква-маленькая или большая буква. А вот к чему тут "*" и все остальное?...
 
 Я пыталась найти нормальную инфу, но пока не преуспела...
 |  
						| 
								|  |  
								|  |  Записан | 
 
 холоднокровней, Маня, Ви не на работе---------------------------------------
 четкое определение сущности бытия:
 - А мы в прошлом или в будущем?- спросила Алиса.
 - Мы в жопе, - ответил кролик.
 - А "жопа" - это настоящее? - спросила Алиса.
 - А "жопа" - это у нас символ вечности.
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #18 : 18-10-2007 16:01 »  |  | 
 
 * - квантификатор "0 или больше". Круглые скобки используются для группировки (и выделения частей). $ - позиция на конце строки. Под данный пример годятся строки: /L:-- /L:aaaa-KJH /L:--QwerTY Странное оно какое-то... Нашел вот описание PCRE для PHP. Синтаксис выражений от языка не меняется, т.ч. пожно почитать тут:http://ru2.php.net/manual/ru/reference.pcre.pattern.syntax.php |  
						| 
								|  |  
								|  |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	| 
			| 
					
						| Malaja | 
								|  | « Ответ #19 : 19-10-2007 08:52 »  |  | 
 
 Ром, спасибочки еще раз! Читаю! Я поняла, почему сама не нашла инфу - искала напрямую про Regex.Match в с-шарп... Заодно, я тут нашла 2 вещи на эту тему (может, это кому-то поможет): 1) есть книга "Mastering Regular Expressions", 3nd Edition  by Jeffrey E. F. Friedl  Но я не знаю, есть она в русском переводе... И пока не нашла ее в электронном варианте... 2) есть сайт: http://www.regular-expressions.info/dotnet.html Короче, буду разбираться. |  
						| 
								|  |  
								|  |  Записан | 
 
 холоднокровней, Маня, Ви не на работе---------------------------------------
 четкое определение сущности бытия:
 - А мы в прошлом или в будущем?- спросила Алиса.
 - Мы в жопе, - ответил кролик.
 - А "жопа" - это настоящее? - спросила Алиса.
 - А "жопа" - это у нас символ вечности.
 |  |  | 
	| 
			| 
					
						| Malaja | 
								|  | « Ответ #20 : 19-10-2007 09:10 »  |  | 
 
 нашла, в русском варианте название книги звучит так: "Регулярные выражения. 2-е изд. Фридл Дж." но вот где скачать хоть какой-то из двух вариантов, пока неясно    |  
						| 
								|  |  
								|  |  Записан | 
 
 холоднокровней, Маня, Ви не на работе---------------------------------------
 четкое определение сущности бытия:
 - А мы в прошлом или в будущем?- спросила Алиса.
 - Мы в жопе, - ответил кролик.
 - А "жопа" - это настоящее? - спросила Алиса.
 - А "жопа" - это у нас символ вечности.
 |  |  | 
	| 
			| 
					
						| RXL | 
								|  | « Ответ #21 : 19-10-2007 15:31 »  |  | 
 
 Нашел книгу в осле - как скачается выложу. Нашел кучу вариантов книг в трех редакциях - отобрал лучшее: залил 1-ю и 3-ю редакции книги. Обе на английском. Посмотреть можно тут: https://club.shelek.ru/viewfiles.php?id=45 |  
						| 
								|  |  
								| « Последнее редактирование: 19-10-2007 19:09 от RXL » |  Записан | 
 
 ... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |  |  | 
	|  |