Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: RegExp Добавлено: 11.08.09 16:36  

Автор вопроса:  Arseny | ICQ: 298826769 
Надо ограничить область действия регэкспа.
например

<1>a</1>
<2>b</2>
<3>c</3>
<4>d</4>
<5>e</5>
<6>f</6>
<7>g</7>

производить поиск и замену только в диапазоне <1>-</6>
т.е. что-то типа регэкспа от регэкспа. как оформить?

Ответить

  Ответы Всего ответов: 16  

Номер ответа: 1
Автор ответа:
 Андрей



Вопросов: 8
Ответов: 42
 Профиль | | #1 Добавлено: 11.08.09 16:56
Найти в тексте номер конечного символа
j = 0: Do While j <= UBound(Text)
If InStr("</6>", Left(Text, 4)) <> 0 Then n = j * 4
Shablon = Mid(Text, 4)
j = j + 1: Loop

а потом ограничить выделенным текстом
TextBox.SelStart = 0
TextBox.SelLength = n

Ответить

Номер ответа: 2
Автор ответа:
 Андрей



Вопросов: 8
Ответов: 42
 Профиль | | #2 Добавлено: 11.08.09 16:57
вместо Shablon писать Text) сори)

Ответить

Номер ответа: 3
Автор ответа:
 Arseny



ICQ: 298826769 

Вопросов: 53
Ответов: 1732
 Профиль | | #3 Добавлено: 11.08.09 17:50
мммм... мне надо регулярное выражение, оно же регэксп.
что-то типа:
<1>;(.*?)</6> - и дальнейший поиск/замену вести именно из полученного результата.

Ответить

Номер ответа: 4
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #4
Добавлено: 12.08.09 00:27
мм диапазон символов случаем не так задается [1-6].. или это в Like так..

Ответить

Номер ответа: 5
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #5 Добавлено: 12.08.09 03:11
Можно так
Символы < и > надо тоже эскейпить.

  1. ^\<[1-6]\>(?<text>.*?)\</[1-6]\>$

это при включеной опции Multiline

Но тогда сюда же пройдут и варианты вроде
  1. <1>b</6>


Чтоб это тоже корректно обрабатывалось, то как-то так

  1. ^(\<[1]\>(?<text>.*?)\</[1]\>|\<[2]\>(?<text>.*?)\</[2]\>|\<[3]\>(?<text>.*?)\</[3]\>|\<[4]\>(?<text>.*?)\</[4]\>|\<[5]\>(?<text>.*?)\</[5]\>|\<[6]\>(?<text>.*?)\</[6]\>|)$


Может можно и как-то проще, не сильно глубоко с регулярными выражениями знаком...

Ответить

Номер ответа: 6
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #6 Добавлено: 12.08.09 03:13
Можно так
Символы < и > надо тоже эскейпить.

  1. ^\<[1-6]\>(?<text>.*?)\</[1-6]\>$

это при включеной опции Multiline

Но тогда сюда же пройдут и варианты вроде
  1. <1>b</6>


Чтоб это тоже корректно обрабатывалось, то как-то так

  1. ^(\<[1]\>(?<text>.*?)\</[1]\>|\<[2]\>(?<text>.*?)\</[2]\>|\<[3]\>(?<text>.*?)\</[3]\>|\<[4]\>(?<text>.*?)\</[4]\>|\<[5]\>(?<text>.*?)\</[5]\>|\<[6]\>(?<text>.*?)\</[6]\>|)$


Может можно и как-то проще, не сильно глубоко с регулярными выражениями знаком...

Ответить

Номер ответа: 7
Автор ответа:
 Arseny



ICQ: 298826769 

Вопросов: 53
Ответов: 1732
 Профиль | | #7 Добавлено: 12.08.09 08:26
O_o... я открыл ящик пандоры...

Winand пишет:
мм диапазон символов случаем не так задается [1-6].. или это в Like так..
а это я не диапазон и указываю. тут имеется ввиду от текста "<1>" до текста </6>
Artyom пишет:
Символы < и > надо тоже эскейпить.
Прокатывает и без них, я как понимаю, это просто определение текста...

Я тут выглядел про рекурсивные регэкспы... параметр \N (N - положительное число. Соответствует n-ной запомненной подстроке. Вычисляется путем подсчета левых круглых скобок)
не могу сообразить, как применить. так бы в первых скобках прописал ограничение, а во вторых конкретно строку поиска.
Кто-нибудь даст простенький пример использования?

Ответить

Номер ответа: 8
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #8 Добавлено: 12.08.09 20:21
Кто-нибудь даст простенький пример использования?

тут все достаточно просто.. эта фича, как правило, юзается в опережающей или ретроспективной(позитивной и негативной) проверках..
Применительно к вопросу топика эту фичу можно заюзать следующим образом:
  1. (?<=<([1-6])>)\w(?=</\1>)

В данном случае я использовал опережающую и ретроспективную позитивные проверки.. В группе с индексом "0" будет находиться искомая буква, а в группе с индексом "1" будет лежать цифра внутри тега. Примечательно то, что варианты типа:
  1. <1>b</6>

тут не прокатят.

Ответить

Номер ответа: 9
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #9 Добавлено: 13.08.09 03:21
Дао регулярных выражений...

Ответить

Номер ответа: 10
Автор ответа:
 Arseny



ICQ: 298826769 

Вопросов: 53
Ответов: 1732
 Профиль | | #10 Добавлено: 13.08.09 13:24
2EROS
Вроде то, что и искал, только вычисляются регэкспы через MS VBscript RegExp, так что
  1. ?<=
там не прокатывает. синтаксис Jscript должен быть.
в общем проще наверное спросить, как лучше распарсить регэкспом настоящую строку:
  1.    <tr><td class="type">страна</td><td class=""><a href="http://localhost">США</a>, <a href="http://localhost">Россия</a></td></tr>


вместо localhost может быть любой другой адрес, стран может быть от 0 и до фига... надо чтоб названия стран попали в одну из групп регэкспа.
Посоветуйте что-нибудь, мозг вообще закипел..

Ответить

Номер ответа: 11
Автор ответа:
 Arseny



ICQ: 298826769 

Вопросов: 53
Ответов: 1732
 Профиль | | #11 Добавлено: 13.08.09 15:22
  1. (?<=страна.*)(/">)(.*?)(<)<br>

вот эдакий подходит, но он прокатывает только в перле, для JScript/VBScript не канает: в них нет просмотра назад, только вперед....

Ответить

Номер ответа: 12
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #12 Добавлено: 14.08.09 08:41
Я с это хренью, MS VBscript RegExp, никогда не работал и надеюсь, не придется.. так что сорри, тут я ничем не помогу..

Ответить

Номер ответа: 13
Автор ответа:
 Arseny



ICQ: 298826769 

Вопросов: 53
Ответов: 1732
 Профиль | | #13 Добавлено: 14.08.09 08:52
но хотя бы подсказать можешь, если я вопрос вот так разверну:
как выполнить регэксп
  1. (/">)(.*?)(<)<br>

только для строки, в которой есть слово "страна"?
и все это без обратного просмотра. :)
боюсь, пока я прочитаю всего Фридла - желание дописывать прогу у меня пропадет.

Ответить

Номер ответа: 14
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #14 Добавлено: 14.08.09 15:04
хм.. Ты говоришь, что обратный(ретроспективный) поиск не поддерживается и в тоже время хочешь написать выражение в котором идет проверка наличие слова "страна" ПЕРЕД искомой строкой.. ты сам себе противоречишь.

Ответить

Номер ответа: 15
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #15 Добавлено: 14.08.09 15:09
Кроме того мне кажется что ты ошибаешься на счет поддержки ретроспективного поиска.. проверь этот паттерн
  1. (?<=страна<.+>)\w+

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам