Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вопрос по регулярным выражениям. Как поймать "НЕ содержит"?
 
 автор: OlegEk   (04.05.2012 в 23:05)   личное сообщение
 
 

Никак не могу найти/понять как мне поймать строку, которая НЕ содержит что либо.
Для примера:

Выражение ловит строчку, начинающуюся с одного двоеточия (работает)
objRegExp.Pattern = "( [ : ] . * ) "
cSource = objRegExp.replace(cSource, "попался ")

Судя по всем мануалам, следующая конструкция должна ловить как раз строки, не начинающиеся с двоеточия (не работает):
objRegExp.Pattern = "( [ ^ : ] . * ) "
cSource = objRegExp.replace(cSource, "попался ")

Аналогично на "содержит" (работает)
objRegExp.Pattern = "( . * [ : ] . * ) "
cSource = objRegExp.replace(cSource, "попался ")
и соответстенно НЕ содержит в соответстии с тем что я вычитал и понял (не работает)
objRegExp.Pattern = "( . * [ ^ : ] . * ) "
cSource = objRegExp.replace(cSource, "попался ")

Подскажите плиз как таки получить сработку на конструкцию НЕ начинается/НЕ содержит

  Ответить  
 
 автор: Дядя Федор   (05.05.2012 в 07:55)   личное сообщение
 
 

А так не проще?

Dim s$
s = ":.*"
Debug.Print Left$(s, 1) = ":" 'возвратит TRUE
Debug.Print InStr(s, ":") 'возвратит 1
s = ".*"
Debug.Print Left$(s, 1) = ":" 'возвратит FALSE
Debug.Print InStr(s, ":") 'возвратит 0

  Ответить  
 
 автор: OlegEk   (05.05.2012 в 09:39)   личное сообщение
 
 

нет, не проще
Общая задача: задача разобраться с регулярками
Частная задача одним действием привести строку к надлежащему виду

Вот пример:
есть строка вида
"Подстрока без двоеточия, будем считать что заголовок
название параметра1:значение параметра1
название параметра2:значение параметра3
название параметра3:значение параметра3"

Мне надо отформатировать её для выгрузки в HTML. Притом так, чтобы заголовок был просто исключен, а остальное было бы подготовлено для вставки в HTML таблицу

строки с параметрами с помощью регулярки разбираются элементарно:

s1= "<t r><t d>"
s2="</t d><t d>"
s3="</t d></t r>"
objRegExp.Pattern = "( . * ) : ( . * ) "
cSource = objRegExp.replace(cSource, s1 & "$1" & s2 & "$2" & s3) 


И логично этой же регуляркой исключить заголовки. То есть по сути это должна сделать вот такая конструкция

objRegExp.Pattern = "( . * [ ^ : ] . * ) "
'   или например objRegExp.Pattern = "( . * [ : ]{0} . * ) "
cSource = objRegExp.replace(cSource, "") 


То есть на выходе должно получиться

"<t r><t d>название параметра1</t d><t d>значение параметра3</t d></t r>
<t r><t d>название параметра2</t d><t d>значение параметра3</t d></t r>
<t r><t d>название параметра3</t d><t d>значение параметра3</t d></t r>"

И не надо сплитить строку на подстроки
Однако именно исключающее условие не срабатывает

2 Силblч
попробовал, не ловится :(

  Ответить  
 
 автор: Силblч   (05.05.2012 в 09:29)   личное сообщение
 
 


objRegExp.Pattern = "^( [ : ] . * ) "

пробовали?

  Ответить  
 
 автор: Дядя Федор   (05.05.2012 в 13:12)   личное сообщение
 
 

  Ответить  
 
 автор: Анатолий (Киев)   (07.05.2012 в 17:21)   личное сообщение
 
 

(?:pattern) Matches pattern but does not capture the match, that is, it is a non-capturing match that is not stored for possible later use. This is useful for combining parts of a pattern with the "or" character (|). For example, 'industr(?:y|ies) is a more economical expression than 'industry|industries'.
(?=pattern) Positive lookahead matches the search string at any point where a string matching pattern begins. This is a non-capturing match, that is, the match is not captured for possible later use. For example 'Windows (?=95|98|NT|2000)' matches "Windows" in "Windows 2000" but not "Windows" in "Windows 3.1". Lookaheads do not consume characters, that is, after a match occurs, the search for the next match begins immediately following the last match, not after the characters that comprised the lookahead.
(?!pattern) Negative lookahead matches the search string at any point where a string not matching pattern begins. This is a non-capturing match, that is, the match is not captured for possible later use. For example 'Windows (?!95|98|NT|2000)' matches "Windows" in "Windows 3.1" but does not match "Windows" in "Windows 2000". Lookaheads do not consume characters, that is, after a match occurs, the search for the next match begins immediately following the last match, not after the characters that comprised the lookahead.


Вот эти правила не описаны в официальной документациии, но работают. Видимо вас интересует вариант "(?!pattern)".

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList