Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

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

 

  Вопрос: Регулярное выражение Добавлено: 04.01.06 20:54  

Автор вопроса:  Svetlana | ICQ: 262385618 
Привет, ребята!

Помогиете, плз, дополнить(!) регулярное выражение.

Суть "Слово1((.|\n)+?)Слово2" в следующем: начинается кусок текста с Слово1, далее могут идти любые любые символы, включая пробелы и переносы на другие строки, и заканчиваться на Слово2.

Надо вставить еще одно условие - чтобы Слово1 повторно в тексте не встречалось.

Кстати, поздравляю всех с прошедшим НГ и наступающим Рождеством! :)

Ответить

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

Номер ответа: 1
Автор ответа:
 PeterS



Вопросов: 24
Ответов: 109
 Профиль | | #1 Добавлено: 04.01.06 22:21
Если я всё правильно понял, то вот так:

If Left$(Text1, Len("Слово1";)) = "Слово1" And Right$(Text1, Len("Слово2";)) = "Слово2" And InStr(Text1, "Слово1";) = InStrRev(Text1, "Слово1";) Then
    MsgBox "Yes"
End If

:) Спасибо, и тебя НГ

Ответить

Номер ответа: 2
Автор ответа:
 Svetlana



ICQ: 262385618 

Вопросов: 43
Ответов: 205
 Профиль | | #2 Добавлено: 04.01.06 22:45
PeterS, так я тоже могу весь файл перелопатить :)
А мне надо через регурярные выражения...

Ответить

Номер ответа: 3
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #3
Добавлено: 04.01.06 23:05
Ей нужно не программное решение, а регулярное выражение (Regular
expression).

Ответить

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


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #4
Добавлено: 04.01.06 23:05
/word1([^(word1)]*)word2/s

Ответить

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



ICQ: 262385618 

Вопросов: 43
Ответов: 205
 Профиль | | #5 Добавлено: 04.01.06 23:32
не нравятся ему скобки внутри кот word1 ([^(word1)]*):
Additional information: parsing (тут рег выр) - [x-y] range in reverse order.

Без скобок ничего не находит.

Ответить

Номер ответа: 6
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #6
Добавлено: 04.01.06 23:45
2 Sharp: не подходит.

BTS([^(BTS)]+?)MBCCH

Искомое выражение...
? добавил - это защита от жадности. Можно и убрать:

BTS([^(BTS)]+)MBCCH

Ну и + на * поменять как у тебя, хотя это вроде как по условию и не
надо.

BTS([^(BTS)]*)MBCCH

Тестим на такое образце:

BTS-genglkergelrBTS-grBelMBCCHrgnerigerMBCCH

По идее должно выйти совпадение на строке:

BTS-grBelMBCCH

Однако Regex терпит неудачу, RegExValidator выдает "There is no
matches". Почему? Потому что [^...] тестирует не слово целиком, а
отдельные буквы. В итоге если в строке попадается буква B, T или S
(как в вышеуказанном случае), выражение не считается совпадающим с
RegEx'ом :(

А вот зачем у тебя "/" в начале и "/s" в конце, я не понял. "/" не
является спецсимволом.

По крайней мере вышесказанное справедливо для регулярных выражений
в .NET

Ответить

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


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #7
Добавлено: 05.01.06 05:39
PCRE-регекспы рулят :)

Ответить

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



Вопросов: 0
Ответов: 1876


 Профиль | | #8 Добавлено: 05.01.06 05:43
К примеру, выражение "/\*.*?\*/" прекрасно находит коммент в стиле С++ - /* ... */.
При условии, что в регэкспе задан параметр SingleLine.

Следовательно, должно работать
Слово1.*?Слово2

Ответить

Номер ответа: 9
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #9
Добавлено: 05.01.06 08:28
2 GSerg: у меня почему-то этот регэксп и такое вот находит:

/* aaa bbb /* ccc */

А не должен, исходя из условия вопроса.

Ответить

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



Вопросов: 0
Ответов: 1876


 Профиль | | #10 Добавлено: 05.01.06 10:48
Тьфу ты...
Слово1 не должно встречаться, а не Слово2...

Щас буду думать мысль...

Ответить

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



Вопросов: 0
Ответов: 1876


 Профиль | | #11 Добавлено: 05.01.06 11:22
Кажется, так...

"Слово1[^(Слово1)]*?Слово2"

Ответить

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



Вопросов: 0
Ответов: 1876


 Профиль | | #12 Добавлено: 05.01.06 11:28
Странно всё это...
На строке с слово1, слово2 работает, на примере Павла - нет...
Да ещё и мало чем отличается от приведённого Sharp'ом...

Ответить

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



Вопросов: 0
Ответов: 1876


 Профиль | | #13 Добавлено: 05.01.06 12:40
Почему-то мне приходит в голову дурацкий вариант развернуть строку наборот и искать развёрнутые же слова. Тогда первое слово станет вторым, и для неповторения сработает квантор ленивости...
Блин, ну должен же быть выход...

Ответить

Номер ответа: 14
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #14
Добавлено: 05.01.06 15:52
Почему-то мне приходит в голову дурацкий вариант развернуть строку наборот и искать развёрнутые же слова.

Тогда встает вопрос о невхождении внутрь выражения Слова2.

Ответить

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



Вопросов: 0
Ответов: 1876


 Профиль | | #15 Добавлено: 05.01.06 15:59
А вот это не обязательно, по текущему условию.

Ответить

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

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



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