|
|
|
| Никак не могу найти/понять как мне поймать строку, которая НЕ содержит что либо.
Для примера:
Выражение ловит строчку, начинающуюся с одного двоеточия (работает)
objRegExp.Pattern = "( [ : ] . * ) "
cSource = objRegExp.replace(cSource, "попался ")
Судя по всем мануалам, следующая конструкция должна ловить как раз строки, не начинающиеся с двоеточия (не работает):
objRegExp.Pattern = "( [ ^ : ] . * ) "
cSource = objRegExp.replace(cSource, "попался ")
Аналогично на "содержит" (работает)
objRegExp.Pattern = "( . * [ : ] . * ) "
cSource = objRegExp.replace(cSource, "попался ")
и соответстенно НЕ содержит в соответстии с тем что я вычитал и понял (не работает)
objRegExp.Pattern = "( . * [ ^ : ] . * ) "
cSource = objRegExp.replace(cSource, "попался ")
Подскажите плиз как таки получить сработку на конструкцию НЕ начинается/НЕ содержит | |
|
| |
|
|
|
| А так не проще?
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
|
| |
|
| |
|
|
|
| нет, не проще
Общая задача: задача разобраться с регулярками
Частная задача одним действием привести строку к надлежащему виду
Вот пример:
есть строка вида
"Подстрока без двоеточия, будем считать что заголовок
название параметра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ч
попробовал, не ловится :( | |
|
| |
|
|
|
|
objRegExp.Pattern = "^( [ : ] . * ) "
|
пробовали? | |
|
| |
|
|
|
|
| (?: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)". | |
|
| |