powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Отличия регэкспов в php и VBScript.Regexp
25 сообщений из 25, страница 1 из 1
Отличия регэкспов в php и VBScript.Regexp
    #35256200
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть ли? Походу есть. Ибо, выдранные из пхп-скрипта и приложенные к vb-скрипту, следующие паттерны не работают:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
const VOWEL = "/аеиоуыэюя/"
const PERFECTIVEGROUND = "/((ив|ивши|ившись|ыв|ывши|ывшись)|((?<=(ая))(в|вши|вшись)))/"
const REFLEXIVE = "/(с(яь))/"
const ADJECTIVE = "/(ее|ие|ые|ое|ими|ыми|ей|ий|ый|ой|ем|им|ым|ом|его|ого|ему|ому|их|ых|ую|юю|ая|яя|ою|ею)/"
const PARTICIPLE = "/((ивш|ывш|ующ)|((?<=(ая))(ем|нн|вш|ющ|щ)))/"
const VERB = "/((ила|ыла|ена|ейте|уйте|ите|или|ыли|ейх.й|ил|ыл|им|ым|ен|ило|ыло|ено|ят|ует|уют|ит|ыт|ены|ить|ыть|ишь|ую|ю)|((?<=(ая))(ла|на|ете|йте|ли|й|л|ем|н|ло|но|ет|ют|ны|ть|ешь|нно)))/"
const NOUN = "/(а|ев|ов|ие|ье|е|иями|ями|ами|еи|ии|и|ией|ей|ой|ий|й|иям|ям|ием|ем|ам|ом|о|у|ах|иях|ях|ы|ь|ию|ью|ю|ия|ья|я)/"
const RVRE = "/^(.*?(аеиоуыэюя))(.*)/"
const DERIVATIONAL = "/(^аеиоуыэюя)(аеиоуыэюя)+(^аеиоуыэюя)+(аеиоуыэюя).*(?<=о)сть?/"

Рально ли их перевести на язык, понятный VBScript.Regexp? В этом деле я ни в зуб ногой.
...
Рейтинг: 0 / 0
Отличия регэкспов в php и VBScript.Regexp
    #35256811
Фотография illion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
отличия есть.
Символ '/' уже не понадобится (шаблон просто строкой задается).
Во-вторых, vb (как и js, кстати), не поддерживает проверок с заглядыванием назад (?<=).

const RVRE = "/^(.*?(аеиоуыэюя))(.*)/" - там точно нет еще []? Потому что по идее должно быть так:
const RVRE = "^(.*?([аеиоуыэюя]))(.*)", иначе будет завязано на подстроку "аеиоуыэюя" (а с [] - на одну из этих гласных).

(?<=) может быть удастся обойти с помощью (?=), но это надо пробовать. Про (?<=) и (?=):
www.intuit.ru
...
Рейтинг: 0 / 0
Отличия регэкспов в php и VBScript.Regexp
    #35257629
Фотография illion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нашла как это выглядит в оригинале. Действительно, почему-то у вас в коде все квадратные скобки оказались круглыми заменены (это неверно).

избавиться от (?<=) у меня получилось только в два этапа.
Например:
было - PERFECTIVEGROUND = "((ив|ивши|ившись|ыв|ывши|ывшись)|((?<=(ая))(в|вши|вшись)))$"
стало -
PERFECTIVEGROUND1 = "(ив|ивши|ившись|ыв|ывши|ывшись)$"
PERFECTIVEGROUND2 = "[ая](?=(в|вши|вшись)$)"

Аналогично для PARTICIPLE и VERB.
DERIVATIONAL имхо можно слегка подправить и что-то такое получить:
DERIVATIONAL = "[^аеиоуыэюя][аеиоуыэюя]+[^аеиоуыэюя]+.*ость$"

На этом мысли мои по теме пока закончились.
...
Рейтинг: 0 / 0
Отличия регэкспов в php и VBScript.Regexp
    #35257631
Фотография illion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
illionPERFECTIVEGROUND2 = "[ая](?=(в|вши|вшись)$)"

вижу можно сократить:
PERFECTIVEGROUND2 = "[ая](в|вши|вшись)$"
...
Рейтинг: 0 / 0
Отличия регэкспов в php и VBScript.Regexp
    #35258068
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
illionДействительно, почему-то у вас в коде все квадратные скобки оказались круглыми заменены (это неверно).Мой косяк. При переводе кода с php на vbs воспользовался комбинацией ctrl+h и не заметил, что под раздачу попали регэкспы.
illionизбавиться от (?<=) у меня получилось только в два этапа.
Например:
было - PERFECTIVEGROUND = "((ив|ивши|ившись|ыв|ывши|ывшись)|((?<=(ая))(в|вши|вшись)))$"
стало -
PERFECTIVEGROUND1 = "(ив|ивши|ившись|ыв|ывши|ывшись)$"
PERFECTIVEGROUND2 = "[ая](?=(в|вши|вшись)$)"А как применить этот результат? В пхп применяется PERFECTIVEGROUND разом, а если применить сначала 1, а потом 2, то получится ли тоже самое?

Спасибо за помощь.
...
Рейтинг: 0 / 0
Отличия регэкспов в php и VBScript.Regexp
    #35258782
Фотография illion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyА как применить этот результат? В пхп применяется PERFECTIVEGROUND разом, а если применить сначала 1, а потом 2, то получится ли тоже самое?


честно говоря, так навскидку думаю что может получиться некорректный результат. Попробую объяснить, что я имею в виду.

пхп-код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
function s(&$s, $re, $to)
    {
        $orig = $s;
        $s = preg_replace($re, $to, $s);
        return $orig !== $s;
    }
....
if (!$this->s($RV, $this->PERFECTIVEGROUND, '')) {
....
т.е. вызывается функция s с шаблоном PERFECTIVEGROUND. Регулярным выражением производится попытка отрезать предусмотренную этим шаблоном часть слова. Этой частью будет одно из (ив|ивши|ившись|ыв|ывши|ывшись) или одно из (в|вши|вшись), перед которыми есть "а" или "я". Если попытка удалась, то это слово и было PERFECTIVEGROUND и дальше условие if не выполняется.

Если поделить шаблон на части, то условие if изменится:
Код: plaintext
1.
if (! ($this->s($RV, $this->PERFECTIVEGROUND1, '') || $this->s($RV, $this->PERFECTIVEGROUND2, '') ))
т.е. если слово не является ни PERFECTIVEGROUND1, ни PERFECTIVEGROUND2, то условие выполняется и начинается проверка на следующие типы. С другой стороны, если первая часть условия выполнится, и от слова будет отрезано одно из (ив|ивши|ившись|ыв|ывши|ывшись), то никто не помешает интерпретатору проверить еще и вторую часть условия, и в оставшемся куске слова отрезать если есть одно из (в|вши|вшись), перед которыми есть "а" или "я". Например, возьмем слово "прославившись". Первой частью условия будет отрезано "ившись" и останется "прослав". Вторая часть отрежет еще и "в". Останется "просла".
Возможно, этого можно избежать с помощью каких-нибудь дополнительных флагов типа "если ты уже отрезал PERFECTIVEGROUND1, то PERFECTIVEGROUND2 не трожь".

P.S. по большому счету рассуждения эти вилами на воде писаны. Чтобы точно сказать - надо попробовать. Да и выглядит это, мягко говоря, коряво. А вариантов рег. выражения без разбиения шаблонов так и не придумалось.
...
Рейтинг: 0 / 0
Отличия регэкспов в php и VBScript.Regexp
    #35258818
Фотография illion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вот еще вдруг подумалось - под "vb-скриптом" что имеется в виду? Потому что сказанное про не-поддержку (?<=) относится клиентским vb-скриптам в хтмл-страницах. Но это же не единственный вариант применения vb. Но вот в этой области уже я "ни в зуб ногой". Возможно в тамошних реализациях и библиотеках более умные интерпретаторы рег.выражений.
...
Рейтинг: 0 / 0
Отличия регэкспов в php и VBScript.Regexp
    #35258928
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
illionа вот еще вдруг подумалось - под "vb-скриптом" что имеется в виду?
Вот это. Правда это не совсем скрипт.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
Option Explicit
Dim Stem_Cache As New Collection
Const VOWEL = "аеиоуыэюя"
Const PERFECTIVEGROUND = "((ив|ивши|ившись|ыв|ывши|ывшись)|((?<=[ая])(в|вши|вшись)))"

Const PERFECTIVEGROUND1 = "(ив|ивши|ившись|ыв|ывши|ывшись)$"
Const PERFECTIVEGROUND2 = "[ая](в|вши|вшись)$"

Const REFLEXIVE = "(с[яь])"
Const ADJECTIVE = "(ее|ие|ые|ое|ими|ыми|ей|ий|ый|ой|ем|им|ым|ом|его|ого|ему|ому|их|ых|ую|юю|ая|яя|ою|ею)"

Const PARTICIPLE = "((ивш|ывш|ующ)|((?<=[ая])(ем|нн|вш|ющ|щ)))"
Const VERB = "((ила|ыла|ена|ейте|уйте|ите|или|ыли|ейх.й|ил|ыл|им|ым|ен|ило|ыло|ено|ят|ует|уют|ит|ыт|ены|ить|ыть|ишь|ую|ю)|((?<=[ая])(ла|на|ете|йте|ли|й|л|ем|н|ло|но|ет|ют|ны|ть|ешь|нно)))"
    
Const NOUN = "(а|ев|ов|ие|ье|е|иями|ями|ами|еи|ии|и|ией|ей|ой|ий|й|иям|ям|ием|ем|ам|ом|о|у|ах|иях|ях|ы|ь|ию|ью|ю|ия|ья|я)"
Const RVRE = "^(.*?[аеиоуыэюя])(.*)"
Const DERIVATIONAL = "[^аеиоуыэюя][аеиоуыэюя]+[^аеиоуыэюя]+[аеиоуыэюя].*(?<=о)сть?"

Private Function s(s1 As String, re As String, toA As String) As Boolean
Dim orig As String
    orig = s1
    objRegexp.Pattern = re
    s1 = objRegexp.Replace(s1, toA)
    s = orig <> s1
End Function

Private Function m(s As String, re As String) As Boolean
    objRegexp.Pattern = re
    m = objRegexp.Test(s)
End Function
    
Function stem_word(word As String) As String
Dim objRegexp As New RegExp
Dim p As MatchCollection
Dim start
Dim rv As String
Dim stem As String

    word = LCase(word)
    word = Replace(word, "ё", "е")
    On Error Resume Next
    rv = Stem_Cache(word)
    If Err.Number =  0  Then
        stem_word = rv
        Exit Function
    End If
    On Error GoTo  0 
    stem = word
    Do
        objRegexp.Pattern = RVRE
        Set p = objRegexp.Execute(word)
        If p.Count =  0  Then Exit Do
        
        'здесь пока вишу
        'start = p(1)
        'rv = p(2)
        If Len(rv) =  0  Then Exit Do

        'Step 1
        If Not s(rv, PERFECTIVEGROUND, "") Then
            Call s(rv, REFLEXIVE, "")
            If (s(rv, ADJECTIVE, "")) Then
                Call s(rv, PARTICIPLE, "")
            Else
                If (Not s(rv, VERB, "")) Then Call s(rv, NOUN, "")
            End If
        End If
    
        'Step 2
        Call s(rv, "и", "")
    
        'Step 3
        If m(rv, DERIVATIONAL) Then Call s(rv, "ость?", "")
    
        'Step 4
        If (Not s(rv, "ь", "")) Then
            Call s(rv, "ейше?", "")
            Call s(rv, "нн", "н")
        End If
        stem = start.rv
    Loop
    Stem_Cache.Add stem, word
    stem_word = stem
End Function
Тогда пойдем с другого конца. Можете на словах объяснить, что должно происходить при применении каждого регэкспа? Буду изобретать обходные пути. На всякий случай повторю, смысл скрипта - выделение корня слова.
...
Рейтинг: 0 / 0
Отличия регэкспов в php и VBScript.Regexp
    #35258946
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
illionПотому что сказанное про не-поддержку (?<=) относится клиентским vb-скриптам в хтмл-страницах.Стандартная виндовская библиотека с регекспами всего одна (в двух версиях), она-то и юзается как в хтмл так и в моей проге.
...
Рейтинг: 0 / 0
Отличия регэкспов в php и VBScript.Regexp
    #35260509
Фотография illion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyСтандартная виндовская библиотека с регекспами всего одна (в двух версиях), она-то и юзается как в хтмл так и в моей проге.на всякий случай проверьте:
Код: plaintext
1.
2.
3.
4.
Set myReg = new RegExp
str = "строка"
myReg.Pattern = "(?<=т)рок"
MsgBox myReg.Test(str)
если скажет, что ошибка в рег. выражении - значит, точно не судьба
-----------------------------------
Во всех шаблонах в коде у вас потерян знак $ (конец строки). Его нужно восстановить, т.к. он указывает на работу именно с окончанием слова, а не с другими его частями.
-----------------------------------
RVRE = "^(.*?[аеиоуыэюя])(.*)$"
^ - начало строки, $-конец строки, .* - любое количество люых символов, [аеиоуыэюя] - один из символов из этого набора (т.е. одна из гласных). (.*?[аеиоуыэюя]) - любые символы вплоть до первой гласной (говоря по-русски, первый слог слова). Круглыми скобками слово разбито на две части - первый слог (потом запоминается как start) и все остальное (потом запоминается как RV).

В пхп-варианте:
Код: plaintext
1.
2.
3.
if (!preg_match($this->RVRE, $word, $p)) break;
$start = $p[ 1 ];
$RV = $p[ 2 ];
слово проверяется на соответствие шаблону RVRE. Найденные подстроки (если есть) запоминаются в массив $p. В данном случае подстрока будет только одна, т.к. в шаблоне указаны метасимволы ^ и $. $p[0] означает всю совпавшую с шаблоном подстроку целиком (в данном случае это будет целиком слово). $p[1] - это то, что совпало с выражением в первых круглых скобках, $p[2] - во вторых.

В vb немного по-другому:
Код: plaintext
1.
2.
objRegexp.Pattern = RVRE
Set p = objRegexp.Execute(word)
в объект p запоминаются совпавшие подстроки. В нашем случае подстрока будет одна, и она будет p.Item(0). Чтобы получить доступ к содержимому частей шаблона, обозначенных круглями скобками, есть Submatches:
Код: plaintext
1.
2.
start = p.Item( 0 ).Submatches.Item( 0 )
rv = p.Item( 0 ).Submatches.Item( 1 )
-----------------------------------
вернемся к PERFECTIVEGROUND = "((ив|ивши|ившись|ыв|ывши|ывшись)|((?<=[ая])(в|вши|вшись)))$".
(ив|ивши|ившись|...) - одна из указанных последовательностей символов. | - обычное ИЛИ. (?<=[ая]) - указывает на то, что перед текущей позицией поиска есть один символ из набора "а","я". Итого - строка заканчвается на одно из (ив|ивши|ившись|ыв|ывши|ывшись) ИЛИ на одно из (в|вши|вшись) пр условии, что перед этими (в|вши|вшись) стоит "а" или "я".
Хитрость в том, что то, что стоит внутри (?<=) не входит в данном случае в итоговую найденную подстроку. Например, для слова "смеявшись" будет найдена подстрока "вшись", а не "явшись".
-----------------------------------
очень полезная оказалась фраза у вас в коде:
Antonariy'здесь пока вишу
'start = p(1)
'rv = p(2)

после нее пришло осознание того, что есть Submatches :-). В связи с этим предлагаю поступить следующим образом.
В шаблонах с (?<=) убрать (?<=) и постараться максимально избавиться от круглых скобок:
Код: plaintext
1.
2.
PERFECTIVEGROUND = "(ив|ивши|ившись|ыв|ывши|ывшись)$|[ая](в|вши|вшись)$"
PARTICIPLE = "(ивш|ывш|ующ)$|[ая](ем|нн|вш|ющ|щ)$"
VERB = "(ила|ыла|ена|ейте|уйте|ите|или|ыли|ейх.й|ил|ыл|им|ым|ен|ило|ыло|ено|ят|ует|уют|ит|ыт|ены|ить|ыть|ишь|ую|ю)$|[ая](ла|на|ете|йте|ли|й|л|ем|н|ло|но|ет|ют|ны|ть|ешь|нно)$"
Остальные шаблоны не трогать.
Перед применением .Replace сделать дополнит. проверку. Если была найдена подстрока, совпадающая с шаблоном из первых круглых скобок, то Replace её. Если была найдена подстрока, совпадающая с [ая](...), то удалить только то, что в скобках.

В коде я это вижу примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
Private Function s(s1 As String, re As String, toA As String) As Boolean
Dim orig As String
    orig = s1
    objRegexp.Pattern = re

    Dim subPatterns As MatchCollection
    Set subPatterns = objRegexp.Execute(str)	'найти совпадения с re
    If subPatterns.Count > 0 Then
        'если совпало с шаблоном из первых круглых скобок, то установим 
	'именно этот шаблон для последующего Replace
        If subPatterns.Item(0).Submatches.Item(0) <> "" Then
            objRegexp.Pattern = subPatterns.Item(0).Submatches.Item(0) & "$"
        Else 
	    'если совпало со вторыми круглыми скобками, то 
	    'запомним только то, что в них
            If subPatterns.Item(0).Submatches.Item(1) <> "" Then 
                objRegexp.Pattern = subPatterns.Item(0).Submatches.Item(1) & "$"
            Else 
		'если не совпало, ни с первой, ни со второй скобкой (хотя как это может 
		'быть?), то установим шаблон "пустая строка" (слово с ней не совпадет)
                objRegexp.Pattern = "^$"
            End If
	End If
    End If

    s1 = objRegexp.Replace(s1, toA)
    s = orig <> s1
End Function

Для шаблонов REFLEXIVE, ADJECTIVE и NOUN будет верно subPatterns.Item(0).Submatches.Item(0) <> "". На метод Test изменение PERFECTIVEGROUND,PARTICIPLE и VERB не повлияет.
...
Рейтинг: 0 / 0
Отличия регэкспов в php и VBScript.Regexp
    #35260510
Фотография illion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
наверное s(rv, "и$", "") будет ругаться, потому что в шаблоне "и$" нет круглых скобок и поэтому нет Submatches. Мутить с проверкой на Submatches не хочется, легче представить "и$" в виде "(и)$".
...
Рейтинг: 0 / 0
Отличия регэкспов в php и VBScript.Regexp
    #35261077
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторна всякий случай проверьтеУвы.
авторВ шаблонах с (?<=) убрать (?<=) и постараться максимально избавиться от круглых скобок:А что насчет DERIVATIONAL? Попробую угадать :) Слово, начинающееся с непонятной комбинации согласных и гласных, с чем угодно в середине и оканчивающееся на "сть", если перед ним "о"?
...
Рейтинг: 0 / 0
Отличия регэкспов в php и VBScript.Regexp
    #35261314
Фотография illion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyА что насчет DERIVATIONAL? Попробую угадать :) Слово, начинающееся с непонятной комбинации согласных и гласных, с чем угодно в середине и оканчивающееся на "сть", если перед ним "о"?
ага, почти угадал. О начале слова речь не идет. [аеиоуыэюя] - любая из гласных, [^аеиоуыэюя] - любая из не-гласных (внутри квадратных скобок ^ - это отрицание). Так что начинаться может с чего угодно, главное чтоб в нем была эта самая непонятная комбинация. И "ь?" означает, что "ь" может есть, а может и нет.
Я предлагаю немного шаблон изменить - "о" выставить в обязательную (включаемую в итог) часть шаблона, а чтоб у него не возникло конфликта с последним [аеиоуыэюя], этот самый [аеиоуыэюя] убрать из шаблона

DERIVATIONAL = "[^аеиоуыэюя][аеиоуыэюя]+[^аеиоуыэюя]+.*ость?"

конечно это немного не то, что было, но я не думаю что это сильно увеличит погрешность стеммера.
...
Рейтинг: 0 / 0
Отличия регэкспов в php и VBScript.Regexp
    #35261767
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Последний вопрос.
В конце цикла есть строчка $stem = $start.$RV;, как она переводится? stem = start & RV?
...
Рейтинг: 0 / 0
Отличия регэкспов в php и VBScript.Regexp
    #35262020
Фотография illion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, конкатенация строк
...
Рейтинг: 0 / 0
Отличия регэкспов в php и VBScript.Regexp
    #35331255
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемая illion , есть еще вопрос по регекспам, задам уж здесь, чтобы не плодить топиков.
Нужно из текста вырезать html и все, что не относится к русскому тексту, но при этом оставить даты (dd.mm.yyyy) и так называемые номера документов типа ГБ-3-16/66, 146-ФЗ, 45. То есть комбинация русских букв, цифр и -/, цифровые последовательности более двух символов, не входящих в "номера", а так же цифровые последовательности из двух символов, ограниченные пробелами.
Пока что имею это:
Код: plaintext
1.
2.
3.
4.
5.
        .Pattern = "<([^>]*)>"
        s = .Replace(LCase$(DocText), " ")
        .Pattern = "title=([^>]*)>" 'предыдущий паттерн почему-то игнорирует title в <a href="урл" title="текст">
        s = .Replace(s, "")
        .Pattern = "[^а-я]"
        s = .Replace(s, " ")
Однако тут удаляется все, что не является русским текстом.
...
Рейтинг: 0 / 0
Отличия регэкспов в php и VBScript.Regexp
    #35331745
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Паттерн для даты собрал.
Код: plaintext
1.
    oRegExp.Pattern = "[0-3]\d\x2e[0-1]\d\x2e\d\d\d\d"
    Debug.Print oRegExp.Replace(s, " ")
Но нужно наоборот - удалить то, что НЕ совпадает. Как сделать НЕ?
...
Рейтинг: 0 / 0
Отличия регэкспов в php и VBScript.Regexp
    #35331756
Фотография illion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy'предыдущий паттерн почему-то игнорирует title в <a href="урл" title="текст">
вообще-то так не должно быть. Может в title содержится какой-то хитрый текст?
Можно еще так попробовать: .Pattern = "<.*?>", но разницы не должно быть.

Напрямую решить задачу думаю нельзя, т.к. если делать это через Replace, то нужно отрицание шаблона целиком, а не
некоторого диапазона символов, но regExp такого не позволяет (точнее сказать, я не знаю можно ли в принципе такое сделать :) ).
У меня такое вышло:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Set myReg = new RegExp
myReg.Global = True
str = "<a href=""урл"" title=""текст"">документов типа ГБ-3-16/66, 146-ФЗ, 45, * date 12.12.1212 и +? date-2 ^ 23.09.2008</a>"
myReg.Pattern = "<.*?>"
str = myReg.Replace(str, "")
myReg.Pattern = "(\d{2}\.\d{2}\.\d{4})|([А-Яа-я]+[\-\/0-9]+)|([\-\/0-9]+[А-Яа-я]+)|(\b\d{2}\b)|([А-Яа-я]+)| "

Set matches = myReg.Execute(str)
newStr = ""
For i= 0  To matches.Count- 1 
    newStr = newStr & matches.Item(i)
Next
MsgBox newStr
т.е. находим все, что удовлетворяет шаблону, и записываем его в новую строку.
Шаблон: дата | [БУКВЫ][-\цифры] | [-\цифры][БУКВЫ] | две цифры | русские буквы | пробел
...
Рейтинг: 0 / 0
Отличия регэкспов в php и VBScript.Regexp
    #35331769
Фотография illion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S. порядок следования частей шаблона важен, т.к. сравнение строки с шаблонов останавливается на первом совпадении. Например, если переставить ([А-Яа-я]+) вперед, то получится совсем другая история.
...
Рейтинг: 0 / 0
Отличия регэкспов в php и VBScript.Regexp
    #35331876
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шаблон почти похож на правду.
Напрямую решить задачу думаю нельзя, т.к. если делать это через Replace, то нужно отрицание шаблона целиком
Можно решать в несколько шагов, как в моем примере.
1) Убрать отдельно стоящие одно-двух значные числа.
2) Убрать одно-двух значные числа с точками (пункты статей, типа "12. ", "4.1.4"), которые не попадают под шаблон даты.
3) Убрать прочие символы за исключением русского алфавита, оставшихся цифр и .-/. С этим я скорее всего сам справлюсь ).
...
Рейтинг: 0 / 0
Отличия регэкспов в php и VBScript.Regexp
    #35331927
Фотография illion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy
Можно решать в несколько шагов, как в моем примере.

можно, в самом деле. Мне просто подумалось, что легче указать то, что должно остаться, чем гадать чего там не должно быть. Сказано - сделано :-).
...
Рейтинг: 0 / 0
Отличия регэкспов в php и VBScript.Regexp
    #35331955
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто номера документов - понятие растяжимое, поэтому мне подумалось, что лучше сначала удалить то, что гарантированно ими не является.
...
Рейтинг: 0 / 0
Отличия регэкспов в php и VBScript.Regexp
    #35332019
Фотография illion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну так на твоей стороне неоспоримое преимущество - знание формата обрабатываемого текста. В итоге-то главное чтоб работало правильно :-).
...
Рейтинг: 0 / 0
Отличия регэкспов в php и VBScript.Regexp
    #35332203
Фотография %?*?%
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
illionнужно отрицание шаблона целиком, а не
некоторого диапазона символов, но regExp такого не позволяет (точнее сказать, я не знаю можно ли в принципе такое сделать :) ).

(?!pattern)

Например - \D(?!2008)(?:\d{4})\D

Если я правильно понял, о чем речь.
...
Рейтинг: 0 / 0
Отличия регэкспов в php и VBScript.Regexp
    #35332727
Фотография illion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(?!pattern) - здесь не подойдет
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Отличия регэкспов в php и VBScript.Regexp
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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