powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Как сделать ленивую выборку в регулярке?
11 сообщений из 11, страница 1 из 1
Как сделать ленивую выборку в регулярке?
    #38745831
Radzhab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть текст

Код: xml
1.
<name>Иванов</name><family>Сергей</family><otch>Петрович</otch><age>37</age><name>Васечкин</name><family>Юрий</family><otch>Антонович</otch><age>16</age><name>Яковлев</name><family>Павел</family><otch>Александрович</otch><age>25</age><total>115</total>



Как выделить этот промежуток (см.вложение)


Пытался сделать этой регуляркой

((?<=<name).+?(?<=</total>))
Выделяет весь текст почему то
...
Рейтинг: 0 / 0
Как сделать ленивую выборку в регулярке?
    #38745858
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему не вот так:
.+(<name>.+</total>)

А вообще для вашего языка что, xml парсеров нет?
...
Рейтинг: 0 / 0
Как сделать ленивую выборку в регулярке?
    #38745859
Radzhab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scf,
xml парсер не вариант юзать. Тока regex. Пишу на шарпе

Ваша регулярка опять таки выделяет весь текст
...
Рейтинг: 0 / 0
Как сделать ленивую выборку в регулярке?
    #38745860
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Корявый xml что ли?
Регулярка выделяет нормально, просто нужно брать не нулевую, а первую группу (которая в скобках)
...
Рейтинг: 0 / 0
Как сделать ленивую выборку в регулярке?
    #38745867
Radzhab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scf,

я извиняюсь конечно) Но что вы подразумеваете под нулевой группой
...
Рейтинг: 0 / 0
Как сделать ленивую выборку в регулярке?
    #38745962
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RadzhabНо что вы подразумеваете под нулевой группой http://msdn.microsoft.com/ru-ru/library/system.text.regularexpressions.match.groups(v=vs.110).aspx

Код: c#
1.
match.Groups[1].value



а саму регулярку можно и так:
Код: c#
1.
.*(<name>.+</total>)


это на случай, если только один персонаж будет.
...
Рейтинг: 0 / 0
Как сделать ленивую выборку в регулярке?
    #38745966
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
другой вариант - нежадный поиск справа налево:
Код: c#
1.
Regex rx = new Regex(@"<name>.+?</total>", RegexOptions.RightToLeft);



тогда без всяких групп обойтись можно. Просто заберет только необходимое, более экономичный вариант в данной ситуации, особенно если длинная строка.
...
Рейтинг: 0 / 0
Как сделать ленивую выборку в регулярке?
    #38746171
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Radzhabscf,

я извиняюсь конечно) Но что вы подразумеваете под нулевой группой

для тех, кто в танке:
найти один раз, а потом найти еще раз с конца уже найденного.
...
Рейтинг: 0 / 0
Как сделать ленивую выборку в регулярке?
    #38746177
ndbn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решение довольно частное
Код: ruby
1.
2.
3.
4.
use strict;
my $text = "<name>Иванов</name><family>Сергей</family><otch>Петрович</otch><age>37</age><name>Васечкин</name><family>Юрий</family><otch>Антонович</otch><age>16</age><name>Яковлев</name><family>Павел</family><otch>Александрович</otch><age>25</age><total>115</total>";
$text =~ /.*(<name>.*?<\/total>)/;
print $1;


Суть в наличии .*
...
Рейтинг: 0 / 0
Как сделать ленивую выборку в регулярке?
    #38746502
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На JavaScript сделал бы так

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
<!DOCTYPE html>
<html>
<head>
<!--
<script src='http://code.jquery.com/jquery-latest.js'></script>
<link rel='stylesheet type=text/css href=tmp.css' />
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
var str='<name>Иванов</name><family>Сергей</family><otch>Петрович</otch><age>37</age><name>Васечкин</name><family>Юрий</family><otch>Антонович</otch><age>16</age><name>Яковлев</name><family>Павел</family><otch>Александрович</otch><age>25</age><total>115</total>';
var a=str.split('<name>');
alert('<name>'+a[a.length-1]);
</script>
</head>
<body>
</body>
</html>
</html>
...
Рейтинг: 0 / 0
Как сделать ленивую выборку в регулярке?
    #38746894
Strangecat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Radzhabscf,
xml парсер не вариант юзать. Тока regex. Пишу на шарпе

Ваша регулярка опять таки выделяет весь текст

Не понял. В дотнете же встроенный XML парсер. Даже с поддержкой LINQ'а.

Как пример: http://stackoverflow.com/questions/16901828/parsing-xml-file-using-c
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Как сделать ленивую выборку в регулярке?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]