powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / регулярные
16 сообщений из 16, страница 1 из 1
регулярные
    #35698962
Фотография alexmsp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ищу по шаблону состоящему из 3-х частей:
1.либо начало строки либо разделитель
2.моя строка
3.либо конец строки либо разделитель
реальный шаблон более сложный, упростил для примера.

вопрос по 1 и 3-й частям:
шаблон без скобок не дает рез-та.
т.е. regEx.Execute записывает в коллекцию Matches результат если:
Код: plaintext
regEx.Pattern = "(^|\W)stroka($|\W)"
и не записывает если:
Код: plaintext
regEx.Pattern = "^|\Wstroka$|\W"
хотя ИМХО по правилам записи шаблонов поиска скобки здесь не обязательны,
почему не срабатывет без скобок? почему обязательно их наличие?

пример тестировал на VBA, но не думаю что это имеет значение (VBA или VBS)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Function Test000()
 
 Dim regEx As Object
 Dim Matches As Object

 Dim TestRes
 
 Set regEx = CreateObject("vbscript.RegExp")
 regEx.IgnoreCase = True
 regEx.Global = False
 regEx.MultiLine = False
 regEx.Pattern = "(^|\W)stroka($|\W)"
 'regEx.Pattern = "^|\Wstroka$|\W"  'этот вариант не срабатывает
 
 Set Matches = regEx.Execute("kal6787ya:lki: yuiuyui; stroka. line- oiuiuy\ uytuyt")
 If Matches.Count =  0  Then TestRes = "" Else TestRes = Matches( 0 )
 Debug.Print TestRes

 Set Matches = Nothing
 Set regEx = Nothing
End Function
...
Рейтинг: 0 / 0
регулярные
    #35698990
Фотография illion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexmspи не записывает если:
Код: plaintext
regEx.Pattern = "^|\Wstroka$|\W"
хотя ИМХО по правилам записи шаблонов поиска скобки здесь не обязательны
какое-то странное у тебя имхо :-). По-моему тут даже невооруженным глазом видно, что это выражение означает "начало строки ИЛИ \Wstroka$ ИЛИ \W". Оно и находит начало строки. И может быть даже кладет его куда-то, но т.к. "начало строки" руками никак не пощупать, то получается твое "не срабатывет без скобок".
...
Рейтинг: 0 / 0
регулярные
    #35700447
Фотография alexmsp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
illionПо-моему тут даже невооруженным глазом видно, что это выражение означает "начало строки ИЛИ \Wstroka$ ИЛИ \W".

Следуя такой логике должны сработать оба варианта:
Код: plaintext
1.
2.
regEx.Pattern = "^|\Wstroka$|\W"  'этот вариант не срабатывает
Set Matches = regEx.Execute("kal6787ya:lki: yuiuyui; stroka")
Код: plaintext
1.
2.
regEx.Pattern = "\Wstroka$"  'этот вариант срабатывает
Set Matches = regEx.Execute("kal6787ya:lki: yuiuyui; stroka") 
А срабаьывает только второй
...
Рейтинг: 0 / 0
регулярные
    #35700583
Фотография alexmsp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
illion,
по логике ты конечно прав,
экспериментально выяснил что последовательность имеет имеет больший приоритет чем |
...
Рейтинг: 0 / 0
регулярные
    #35700602
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexmsp,

illion - она.
...
Рейтинг: 0 / 0
регулярные
    #35700627
Фотография alexmsp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
УПС, пардон:)
...
Рейтинг: 0 / 0
регулярные
    #35700827
Фотография alexmsp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и первый вариант конечно тоже срабатывает.
...
Рейтинг: 0 / 0
регулярные
    #35701395
Фотография illion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexmsp
Следуя такой логике должны сработать оба варианта:
Код: plaintext
1.
2.
regEx.Pattern = "^|\Wstroka$|\W"  'этот вариант не срабатывает
Set Matches = regEx.Execute("kal6787ya:lki: yuiuyui; stroka")
Код: plaintext
1.
2.
regEx.Pattern = "\Wstroka$"  'этот вариант срабатывает
Set Matches = regEx.Execute("kal6787ya:lki: yuiuyui; stroka") 
А срабаьывает только второй

срабатывают ОБА варианта. Пример на VBS:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<script  language="VBScript">
	Set regEx = new RegExp
	regEx.Pattern = "^|\Wstroka$|\W"
	str = "kal6787ya:lki: yuiuyui; stroka"
	MsgBox regEx.Test(str)

	Set Matches = regEx.Execute(str)
	MsgBox Matches.Count
</script>
</head>
<body></body>
</html>
Test выдаст "Истина", т.е. искомая подстрока содержится в данной подстроке. Count покажет "1", т.е. на выход идет первое найденное совпадение - начало строки (^). А то, что тебе не удается глазами увидеть "начало строки" - так это нормально, значит, галлюцинаций нет :-). Был бы модификатор Global - был бы другой результат.

alexmsp
экспериментально выяснил что последовательность имеет имеет больший приоритет чем |

что есть "последовательность" в данном контексте?
...
Рейтинг: 0 / 0
регулярные
    #35701408
--------------
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
выржение "kal6787ya:lki: yuiuyui; stroka".match(/\bstroka\b/) спасет отца русской демократии
...
Рейтинг: 0 / 0
регулярные
    #35702888
Фотография alexmsp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
illion,
последовательность означает последовательно расположенные символы в шаблоне.

Кто знает почему не работает такое:"[\W^]stroka[\W$]" ?
Вопрос чисто теоретический от слабого знания теории регулярных.

-------------- ,
не спасет, у меня в "словах" могут быть и др. символы кроме \w (это для примера нарисовано).
...
Рейтинг: 0 / 0
регулярные
    #35704206
Фотография illion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexmsp,

ну так почитайте что-нибудь про регулярные выражения, просветитесь. В рунете советую курс на intuit.ru . Курс дан по регэкспам в perl, но бОльшая часть описанного справедлива и для других языков (за исключением ретроспективных проверок и некоторых доп. конструкций).

По заданному вопросу:
[ ] задает класс символов. И ^ внутри [ ] будет обычным символом, а не спецсимволом "начало строки", либо будет означать отрицание, если стоит сразу после [.


P.S. что, такие уж неразрешимые проблемы с лишними круглыми скобками возникли?
...
Рейтинг: 0 / 0
регулярные
    #35705184
Фотография alexmsp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
illion,
да нет, с круглыми все хорошо, все решилось, дело в том что я любопытный:)
Предполагал что начало и конец строки воспринимаются буквально только в таком виде \^ и \$.
Почитать бы конечно, но время:) - я же не IT-ишник, занимаюсь IT для развлечения и для автоматизации повседневной работы.
В принципе думаю шаблон можно записать кратко без кр.скобок (для этого придется почитать книжку или курс):
пришел на ум не очень короткий вариант в лоб:)
\Wstroka\W|^stroka\W|\Wstroka$|^stroka$


Спасибо за ответ:)
...
Рейтинг: 0 / 0
регулярные
    #35705810
Фотография alexmsp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, почему интересно найти красивый вариант без кр.скобок.
ИМХО круглые скобки увеличивают общее время работы на больших объемах т.к. это означает запоминание каждого найденного соответствия. Даже если Global - False - для кажого Match(0) будут запомнены еще 2 Submatches.
...
Рейтинг: 0 / 0
регулярные
    #35706906
alexmsp, так ставь конкретную задачу. Мы понятливые.
...
Рейтинг: 0 / 0
регулярные
    #35707015
Фотография illion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexmspИМХО круглые скобки увеличивают общее время работы на больших объемах т.к. это означает запоминание каждого найденного соответствия. Даже если Global - False - для кажого Match(0) будут запомнены еще 2 Submatches.
это не повод отказываться от круглых скобок. Для увеличения скорости/уменьшения размеров массива Submatches можно использовать несохраняющие скобки (?:). regEx.Pattern = "(?:^|\W)stroka(?:$|\W)" . Еще раз советую ознакомиться с курсом по регэкспам, ссылку на который я давала. Про (?:) надо искать в лекции "дополнительные конструкции"
...
Рейтинг: 0 / 0
регулярные
    #35707871
Фотография alexmsp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
illion,
Спасибо, это уже то что надо. Видел эту конструкцию в описании , но не сообразил ее применить.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / регулярные
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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