powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Регулярные выражения
8 сообщений из 8, страница 1 из 1
Регулярные выражения
    #32630259
viper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такое вот выражение:
Код: plaintext
1.
2.
3.
update(\s)*(\t)*(\\r\\n)*(\s)*(\t)*(\w)+(\s)*(\t)*(\\r\\n)*(\s)*(\t)*set(\s)*(\t)*(\\r\\n)*(\s)*(\t)*
((,)?(\w)+\.(\w)+(\s)*(\t)*(\\r\\n)*(\s)*(\t)*=(\s)*(\t)*(\\r\\n)*(\s)*(\t)*(\w+\.)?((\w+|@\w+)|('(\s)*(\w)+(\s)*'|\w+\(*\)))(\s)*(\t)*(\\r\\n)*(\s)*(\t)*)+
(\s)*(\t)*(\\r\\n)*(\s)*(\t)*
from(\s)*(\t)*(\\r\\n)*(\s)*(\t)*Document
именно \\r\\n а не \r\n
Ищу в таком вот тексте:

Код: plaintext
1.
2.
3.
4.
update card set  
     card.IsLocked =  1   
    ,card.EditAt  = GETDATE()  
    ,card.EditBy  = @emID_Edit   
  from  iplCards card 

Поиск виснет с концами... :( Вот я хочу выяснить это я ошибаюсь в сомом выражении или это шарповый движок рег.выражений шалит... Мож знает кто?
_________________________________________________
Легче написать не правильную программу чем понять правильную (С) Alan Perlis
...
Рейтинг: 0 / 0
Регулярные выражения
    #32630446
Макс М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. какой язык используешь ? (или какая библиотека занимается обработкой регекспа)

2. убери ненужные скобки. Из-за них у тебя сохраняется слишком много результатов. Или замени их на несохраняющие скобки (?: ......);
Код: plaintext
update\s*\t*(?:\\r\\n)*\s*\t* ....

3. \t , входит в список символов \s так что вместо
\s*\t* можно писать \s*
К тому же в регекспах (в известных мне диалектах) есть режим многострочного поиска, при котором \r\n тоже входят в множество \s
Тогда вместо
Код: plaintext
(\s)*(\t)*(\\r\\n)*(\s)*(\t)*(\w)+
можно писать
Код: plaintext
\s*(\w)+

4. Одной из причин, что у тебя все виснет может быть то что ты везде используешь нежадный поиск. Сделай поиск нежадным.

5. А теперь, внимание, вопрос. Что ты хочешь найти своим выражением ?
...
Рейтинг: 0 / 0
Регулярные выражения
    #32630447
Макс М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я тут малость напутал.
В многострочном режиме \r\n попадают в множество всех символов (точка в регекспе).
А в множество \s они всегда входят
...
Рейтинг: 0 / 0
Регулярные выражения
    #32630448
Макс М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Макс М4. Одной из причин, что у тебя все виснет может быть то что ты везде используешь нежадный поиск. Сделай поиск нежадным.
мля, невниматеьный я сегодня.
Ты везде жадный поиск используешь. Сделай его нежадным
...
Рейтинг: 0 / 0
Регулярные выражения
    #32631480
viper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что есть нежадный поиск? Для меня пока рег выражения чет из серии новинки. Поиск в куче файов должен найти так называемые self-join ну например

update t
t.id = ...
t... = ...
.........
from test t
inner join ...

причем проблема в том что test может фигурировать или в from или в inner join. Главное что б алиас после update соответствовал test...
_________________________________________________
Легче написать не правильную программу чем понять правильную (С) Alan Perlis
...
Рейтинг: 0 / 0
Регулярные выражения
    #32632203
Макс М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример жадного и нежадного поиска (использую PCRE):
Допустим есть строка :
Код: plaintext
text [code] other text [code1] text 
Если к ней применить регулярное віражение
Код: plaintext
/\[.*\]/
(поиск символов между [ и ] )
то получим резултат
Код: plaintext
[code] other text [code1]

Это жадный поиск. То есть звездочка ищет максимальную строку.
А вот пример нежадного поиска (поиск минимальной строки):
Код: plaintext
/\[.*?\]/
В зависимости о того какую функцию мы используем можно получить либо одну строку:
Код: plaintext
 [code] 
либо массив строк
Код: plaintext
1.
2.
 1  => [code]
 2  => [code1]
...
Рейтинг: 0 / 0
Регулярные выражения
    #32632663
viper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Thx, за просвещение, а есть ли способ указать какое нибудь правило на глобальном уровне, ну типа такое-то выражение безразлично где, должно присутствовать ровно один раз...
_________________________________________________
Легче написать не правильную программу чем понять правильную (С) Alan Perlis
...
Рейтинг: 0 / 0
Регулярные выражения
    #32633631
Макс М.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в регекспах не бывает абстрактных примеров.
Здесь только четки формат строки, четкое описние, что нужно найти и только после этого можно писать регексп.

Почитай книгу Фридл "Регулярные выражения" - второе издание.
Несмотря на то что почти все примеры там на перл, эта книга учит понимать регекспы
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Регулярные выражения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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