Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / регулярные / 16 сообщений из 16, страница 1 из 1
08.12.2008, 02:16
    #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
08.12.2008, 03:48
    #35698990
illion
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
регулярные
alexmspи не записывает если:
Код: plaintext
regEx.Pattern = "^|\Wstroka$|\W"
хотя ИМХО по правилам записи шаблонов поиска скобки здесь не обязательны
какое-то странное у тебя имхо :-). По-моему тут даже невооруженным глазом видно, что это выражение означает "начало строки ИЛИ \Wstroka$ ИЛИ \W". Оно и находит начало строки. И может быть даже кладет его куда-то, но т.к. "начало строки" руками никак не пощупать, то получается твое "не срабатывет без скобок".
...
Рейтинг: 0 / 0
08.12.2008, 16:05
    #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
08.12.2008, 16:43
    #35700583
alexmsp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
регулярные
illion,
по логике ты конечно прав,
экспериментально выяснил что последовательность имеет имеет больший приоритет чем |
...
Рейтинг: 0 / 0
08.12.2008, 16:50
    #35700602
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
регулярные
alexmsp,

illion - она.
...
Рейтинг: 0 / 0
08.12.2008, 16:55
    #35700627
alexmsp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
регулярные
УПС, пардон:)
...
Рейтинг: 0 / 0
08.12.2008, 18:03
    #35700827
alexmsp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
регулярные
и первый вариант конечно тоже срабатывает.
...
Рейтинг: 0 / 0
09.12.2008, 00:54
    #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
09.12.2008, 01:17
    #35701408
--------------
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
регулярные
выржение "kal6787ya:lki: yuiuyui; stroka".match(/\bstroka\b/) спасет отца русской демократии
...
Рейтинг: 0 / 0
09.12.2008, 15:03
    #35702888
alexmsp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
регулярные
illion,
последовательность означает последовательно расположенные символы в шаблоне.

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

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

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

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


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


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


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