powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / использование регулярных выражений
13 сообщений из 13, страница 1 из 1
использование регулярных выражений
    #34986497
Можно ли с помощю RegExp выбрать подстроки находящиеся между определенными символами.
Например из строки "aab1ccab2c" надо выбрать строки, находящиеся между символами "a" и "c",
т.е. это должны быть строки "b1" и "b2"
...
Рейтинг: 0 / 0
использование регулярных выражений
    #34986510
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кааааанешно можно. Нет ничего проще.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
str = "aab1ccab2c"
pat = "a([^ac]+)c"

set re = new RegExp
re.Pattern = pat
re.Global = True
for each m in re.Execute(str)
  wscript.echo m.SubMatches( 0 )
next
...
Рейтинг: 0 / 0
использование регулярных выражений
    #35022052
А если надо выбрать строку, находящуюся не между символами, а между строк, которые могут состоять из нескольких символов? Например, для вышеприведенного примера вернуть строку, находящуюся между "ab1" и "ab2", т.е. "cc".
...
Рейтинг: 0 / 0
использование регулярных выражений
    #35022058
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда получается еще проще:
Код: plaintext
pat = "ab1(.+)ab2"
...
Рейтинг: 0 / 0
использование регулярных выражений
    #35022060
White Owlтогда получается еще проще:
Код: plaintext
pat = "ab1(.+)ab2"


Да, но для строки "ab1weab1ccab2c" этот вариант вернет "weab1cc", а надо "сс"
...
Рейтинг: 0 / 0
использование регулярных выражений
    #35022110
Фотография PA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не понимающий RegExpДа, но для строки "ab1weab1ccab2c" этот вариант вернет "weab1cc", а надо "сс"
Код: plaintext
"ab1(?!.*ab1)(.+?)ab2"
...
Рейтинг: 0 / 0
использование регулярных выражений
    #35022311
PA Не понимающий RegExpДа, но для строки "ab1weab1ccab2c" этот вариант вернет "weab1cc", а надо "сс"
Код: plaintext
"ab1(?!.*ab1)(.+?)ab2"


Я же строку привожу для примера, вышеуказанный pattern неправильно сработает для строки "aab1ccab2c", когда надо вернуть текст между "a" и "c". Возвращает только "b2", а "b1" нет.
...
Рейтинг: 0 / 0
использование регулярных выражений
    #35022576
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чем самый первый пример не нравится?
...
Рейтинг: 0 / 0
использование регулярных выражений
    #35022733
DeggasadА чем самый первый пример не нравится?
он работает только в том случае, если строки между которыми надо вернуть строку состоят из одного символа. В общем случа должно работать так:
Из произвольной строки надо вернуть подстроку, находящуюся между двумя заданными подстроками.
...
Рейтинг: 0 / 0
использование регулярных выражений
    #35023131
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не понимающий RegExp DeggasadА чем самый первый пример не нравится?
он работает только в том случае, если строки между которыми надо вернуть строку состоят из одного символа. В общем случа должно работать так:
Из произвольной строки надо вернуть подстроку, находящуюся между двумя заданными подстроками.
У меня вроде всё работает!
...
Рейтинг: 0 / 0
использование регулярных выражений
    #35023203
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Беру слова обратно
вроде не работает
...
Рейтинг: 0 / 0
использование регулярных выражений
    #35024469
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не понимающий RegExp White Owlтогда получается еще проще:
Код: plaintext
pat = "ab1(.+)ab2"


Да, но для строки "ab1weab1ccab2c" этот вариант вернет "weab1cc", а надо "сс"Ну тогда чуть сложнее :) Не так давно в "Программировании" был топик на эту тему. В итоге придумали два варианта:
Код: plaintext
1.
pat = "ab1((?:(?!ab1).)+?)ab2"
pat = "ab1(([^a]|a(?!b1))+?)ab2"
Оба решают задачу "найти все что между двумя словами и при этом между ними не должно быть третьего слова".
...
Рейтинг: 0 / 0
использование регулярных выражений
    #35024513
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не понимающий RegExpВ общем случа должно работать так:
Из произвольной строки надо вернуть подстроку, находящуюся между двумя заданными подстроками.В этом и есть тонкость регулярных выражений - точность постановки задачи очень важна. До тех пор пока ты этого не поймешь - твой ник не изменится :)

Задачу "Из произвольной строки надо вернуть подстроку, находящуюся между двумя заданными подстроками." Идеально решает шаблон /first(.+)second/, в условии задачи не сказано что между ними что-то там "не должно быть". Поэтому и шаблон /first(.+)second/ наложенный на строку "first-first-second-third-second" вернет подстроку "-first-second-third-". И это совершенно правильное решение задачи.
Хочешь чтобы подстрока обрезалась по первому появлению второго слова? Тогда запрети жадность: /first(.+?)second/ Это уже вернет подстроку "-first-" - первое вхождение первого слова и первое вхождение второго слова. Но теперь у нас и начальная задача уже другая, теперь это уже "Из произвольной строки вернуть подстроку, после первого вхождения одного заданного слова и до первого вхождения другого заданного слова"....

Ну а как решается задача "вернуть подстроку между двумя ближайшими вхождениями двух заданных слов" описывать очень долго. Лучше почитай тут: /topic/492302
А еще будет очень-очень полезно изучить Perl, когда научишься на нем писать - регулярки станут семечаками. Ну кроме особо тяжелых случаев :)
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / использование регулярных выражений
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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