Страница: 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-сайт:
Профиль | | #3
Добавлено: 04.01.06 23:05
Ей нужно не программное решение, а регулярное выражение (Regular
expression).
Номер ответа: 4
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #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-сайт:
Профиль | | #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-сайт:
Профиль | | #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-сайт:
Профиль | | #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-сайт:
Профиль | | #14
Добавлено: 05.01.06 15:52
Тогда встает вопрос о невхождении внутрь выражения Слова2.
Номер ответа: 15
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #15
Добавлено: 05.01.06 15:59
А вот это не обязательно, по текущему условию.