|
|
|
Отличия регэкспов в php и VBScript.Regexp
|
|||
|---|---|---|---|
|
#18+
Есть ли? Походу есть. Ибо, выдранные из пхп-скрипта и приложенные к vb-скрипту, следующие паттерны не работают: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Рально ли их перевести на язык, понятный VBScript.Regexp? В этом деле я ни в зуб ногой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2008, 14:10 |
|
||
|
Отличия регэкспов в php и VBScript.Regexp
|
|||
|---|---|---|---|
|
#18+
отличия есть. Символ '/' уже не понадобится (шаблон просто строкой задается). Во-вторых, vb (как и js, кстати), не поддерживает проверок с заглядыванием назад (?<=). const RVRE = "/^(.*?(аеиоуыэюя))(.*)/" - там точно нет еще []? Потому что по идее должно быть так: const RVRE = "^(.*?([аеиоуыэюя]))(.*)", иначе будет завязано на подстроку "аеиоуыэюя" (а с [] - на одну из этих гласных). (?<=) может быть удастся обойти с помощью (?=), но это надо пробовать. Про (?<=) и (?=): www.intuit.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2008, 16:51 |
|
||
|
Отличия регэкспов в php и VBScript.Regexp
|
|||
|---|---|---|---|
|
#18+
нашла как это выглядит в оригинале. Действительно, почему-то у вас в коде все квадратные скобки оказались круглыми заменены (это неверно). избавиться от (?<=) у меня получилось только в два этапа. Например: было - PERFECTIVEGROUND = "((ив|ивши|ившись|ыв|ывши|ывшись)|((?<=(ая))(в|вши|вшись)))$" стало - PERFECTIVEGROUND1 = "(ив|ивши|ившись|ыв|ывши|ывшись)$" PERFECTIVEGROUND2 = "[ая](?=(в|вши|вшись)$)" Аналогично для PARTICIPLE и VERB. DERIVATIONAL имхо можно слегка подправить и что-то такое получить: DERIVATIONAL = "[^аеиоуыэюя][аеиоуыэюя]+[^аеиоуыэюя]+.*ость$" На этом мысли мои по теме пока закончились. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2008, 06:28 |
|
||
|
Отличия регэкспов в php и VBScript.Regexp
|
|||
|---|---|---|---|
|
#18+
illionPERFECTIVEGROUND2 = "[ая](?=(в|вши|вшись)$)" вижу можно сократить: PERFECTIVEGROUND2 = "[ая](в|вши|вшись)$" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2008, 06:31 |
|
||
|
Отличия регэкспов в php и VBScript.Regexp
|
|||
|---|---|---|---|
|
#18+
illionДействительно, почему-то у вас в коде все квадратные скобки оказались круглыми заменены (это неверно).Мой косяк. При переводе кода с php на vbs воспользовался комбинацией ctrl+h и не заметил, что под раздачу попали регэкспы. illionизбавиться от (?<=) у меня получилось только в два этапа. Например: было - PERFECTIVEGROUND = "((ив|ивши|ившись|ыв|ывши|ывшись)|((?<=(ая))(в|вши|вшись)))$" стало - PERFECTIVEGROUND1 = "(ив|ивши|ившись|ыв|ывши|ывшись)$" PERFECTIVEGROUND2 = "[ая](?=(в|вши|вшись)$)"А как применить этот результат? В пхп применяется PERFECTIVEGROUND разом, а если применить сначала 1, а потом 2, то получится ли тоже самое? Спасибо за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2008, 10:51 |
|
||
|
Отличия регэкспов в php и VBScript.Regexp
|
|||
|---|---|---|---|
|
#18+
AntonariyА как применить этот результат? В пхп применяется PERFECTIVEGROUND разом, а если применить сначала 1, а потом 2, то получится ли тоже самое? честно говоря, так навскидку думаю что может получиться некорректный результат. Попробую объяснить, что я имею в виду. пхп-код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Если поделить шаблон на части, то условие if изменится: Код: plaintext 1. Возможно, этого можно избежать с помощью каких-нибудь дополнительных флагов типа "если ты уже отрезал PERFECTIVEGROUND1, то PERFECTIVEGROUND2 не трожь". P.S. по большому счету рассуждения эти вилами на воде писаны. Чтобы точно сказать - надо попробовать. Да и выглядит это, мягко говоря, коряво. А вариантов рег. выражения без разбиения шаблонов так и не придумалось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2008, 13:30 |
|
||
|
Отличия регэкспов в php и VBScript.Regexp
|
|||
|---|---|---|---|
|
#18+
а вот еще вдруг подумалось - под "vb-скриптом" что имеется в виду? Потому что сказанное про не-поддержку (?<=) относится клиентским vb-скриптам в хтмл-страницах. Но это же не единственный вариант применения vb. Но вот в этой области уже я "ни в зуб ногой". Возможно в тамошних реализациях и библиотеках более умные интерпретаторы рег.выражений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2008, 13:41 |
|
||
|
Отличия регэкспов в php и VBScript.Regexp
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2008, 14:06 |
|
||
|
Отличия регэкспов в php и VBScript.Regexp
|
|||
|---|---|---|---|
|
#18+
illionПотому что сказанное про не-поддержку (?<=) относится клиентским vb-скриптам в хтмл-страницах.Стандартная виндовская библиотека с регекспами всего одна (в двух версиях), она-то и юзается как в хтмл так и в моей проге. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2008, 14:11 |
|
||
|
Отличия регэкспов в php и VBScript.Regexp
|
|||
|---|---|---|---|
|
#18+
AntonariyСтандартная виндовская библиотека с регекспами всего одна (в двух версиях), она-то и юзается как в хтмл так и в моей проге.на всякий случай проверьте: Код: plaintext 1. 2. 3. 4. ----------------------------------- Во всех шаблонах в коде у вас потерян знак $ (конец строки). Его нужно восстановить, т.к. он указывает на работу именно с окончанием слова, а не с другими его частями. ----------------------------------- RVRE = "^(.*?[аеиоуыэюя])(.*)$" ^ - начало строки, $-конец строки, .* - любое количество люых символов, [аеиоуыэюя] - один из символов из этого набора (т.е. одна из гласных). (.*?[аеиоуыэюя]) - любые символы вплоть до первой гласной (говоря по-русски, первый слог слова). Круглыми скобками слово разбито на две части - первый слог (потом запоминается как start) и все остальное (потом запоминается как RV). В пхп-варианте: Код: plaintext 1. 2. 3. В vb немного по-другому: Код: plaintext 1. 2. Код: plaintext 1. 2. вернемся к PERFECTIVEGROUND = "((ив|ивши|ившись|ыв|ывши|ывшись)|((?<=[ая])(в|вши|вшись)))$". (ив|ивши|ившись|...) - одна из указанных последовательностей символов. | - обычное ИЛИ. (?<=[ая]) - указывает на то, что перед текущей позицией поиска есть один символ из набора "а","я". Итого - строка заканчвается на одно из (ив|ивши|ившись|ыв|ывши|ывшись) ИЛИ на одно из (в|вши|вшись) пр условии, что перед этими (в|вши|вшись) стоит "а" или "я". Хитрость в том, что то, что стоит внутри (?<=) не входит в данном случае в итоговую найденную подстроку. Например, для слова "смеявшись" будет найдена подстрока "вшись", а не "явшись". ----------------------------------- очень полезная оказалась фраза у вас в коде: Antonariy'здесь пока вишу 'start = p(1) 'rv = p(2) после нее пришло осознание того, что есть Submatches :-). В связи с этим предлагаю поступить следующим образом. В шаблонах с (?<=) убрать (?<=) и постараться максимально избавиться от круглых скобок: Код: plaintext 1. 2. Перед применением .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. Для шаблонов REFLEXIVE, ADJECTIVE и NOUN будет верно subPatterns.Item(0).Submatches.Item(0) <> "". На метод Test изменение PERFECTIVEGROUND,PARTICIPLE и VERB не повлияет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2008, 02:41 |
|
||
|
Отличия регэкспов в php и VBScript.Regexp
|
|||
|---|---|---|---|
|
#18+
наверное s(rv, "и$", "") будет ругаться, потому что в шаблоне "и$" нет круглых скобок и поэтому нет Submatches. Мутить с проверкой на Submatches не хочется, легче представить "и$" в виде "(и)$". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2008, 02:44 |
|
||
|
Отличия регэкспов в php и VBScript.Regexp
|
|||
|---|---|---|---|
|
#18+
авторна всякий случай проверьтеУвы. авторВ шаблонах с (?<=) убрать (?<=) и постараться максимально избавиться от круглых скобок:А что насчет DERIVATIONAL? Попробую угадать :) Слово, начинающееся с непонятной комбинации согласных и гласных, с чем угодно в середине и оканчивающееся на "сть", если перед ним "о"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2008, 11:02 |
|
||
|
Отличия регэкспов в php и VBScript.Regexp
|
|||
|---|---|---|---|
|
#18+
AntonariyА что насчет DERIVATIONAL? Попробую угадать :) Слово, начинающееся с непонятной комбинации согласных и гласных, с чем угодно в середине и оканчивающееся на "сть", если перед ним "о"? ага, почти угадал. О начале слова речь не идет. [аеиоуыэюя] - любая из гласных, [^аеиоуыэюя] - любая из не-гласных (внутри квадратных скобок ^ - это отрицание). Так что начинаться может с чего угодно, главное чтоб в нем была эта самая непонятная комбинация. И "ь?" означает, что "ь" может есть, а может и нет. Я предлагаю немного шаблон изменить - "о" выставить в обязательную (включаемую в итог) часть шаблона, а чтоб у него не возникло конфликта с последним [аеиоуыэюя], этот самый [аеиоуыэюя] убрать из шаблона DERIVATIONAL = "[^аеиоуыэюя][аеиоуыэюя]+[^аеиоуыэюя]+.*ость?" конечно это немного не то, что было, но я не думаю что это сильно увеличит погрешность стеммера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2008, 11:52 |
|
||
|
Отличия регэкспов в php и VBScript.Regexp
|
|||
|---|---|---|---|
|
#18+
Последний вопрос. В конце цикла есть строчка $stem = $start.$RV;, как она переводится? stem = start & RV? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2008, 13:41 |
|
||
|
Отличия регэкспов в php и VBScript.Regexp
|
|||
|---|---|---|---|
|
#18+
да, конкатенация строк ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2008, 14:42 |
|
||
|
Отличия регэкспов в php и VBScript.Regexp
|
|||
|---|---|---|---|
|
#18+
Уважаемая illion , есть еще вопрос по регекспам, задам уж здесь, чтобы не плодить топиков. Нужно из текста вырезать html и все, что не относится к русскому тексту, но при этом оставить даты (dd.mm.yyyy) и так называемые номера документов типа ГБ-3-16/66, 146-ФЗ, 45. То есть комбинация русских букв, цифр и -/, цифровые последовательности более двух символов, не входящих в "номера", а так же цифровые последовательности из двух символов, ограниченные пробелами. Пока что имею это: Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2008, 13:47 |
|
||
|
Отличия регэкспов в php и VBScript.Regexp
|
|||
|---|---|---|---|
|
#18+
Паттерн для даты собрал. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2008, 15:46 |
|
||
|
Отличия регэкспов в php и VBScript.Regexp
|
|||
|---|---|---|---|
|
#18+
Antonariy'предыдущий паттерн почему-то игнорирует title в <a href="урл" title="текст"> вообще-то так не должно быть. Может в title содержится какой-то хитрый текст? Можно еще так попробовать: .Pattern = "<.*?>", но разницы не должно быть. Напрямую решить задачу думаю нельзя, т.к. если делать это через Replace, то нужно отрицание шаблона целиком, а не некоторого диапазона символов, но regExp такого не позволяет (точнее сказать, я не знаю можно ли в принципе такое сделать :) ). У меня такое вышло: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Шаблон: дата | [БУКВЫ][-\цифры] | [-\цифры][БУКВЫ] | две цифры | русские буквы | пробел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2008, 15:48 |
|
||
|
Отличия регэкспов в php и VBScript.Regexp
|
|||
|---|---|---|---|
|
#18+
P.S. порядок следования частей шаблона важен, т.к. сравнение строки с шаблонов останавливается на первом совпадении. Например, если переставить ([А-Яа-я]+) вперед, то получится совсем другая история. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2008, 15:50 |
|
||
|
Отличия регэкспов в php и VBScript.Regexp
|
|||
|---|---|---|---|
|
#18+
Шаблон почти похож на правду. Напрямую решить задачу думаю нельзя, т.к. если делать это через Replace, то нужно отрицание шаблона целиком Можно решать в несколько шагов, как в моем примере. 1) Убрать отдельно стоящие одно-двух значные числа. 2) Убрать одно-двух значные числа с точками (пункты статей, типа "12. ", "4.1.4"), которые не попадают под шаблон даты. 3) Убрать прочие символы за исключением русского алфавита, оставшихся цифр и .-/. С этим я скорее всего сам справлюсь ). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2008, 16:17 |
|
||
|
Отличия регэкспов в php и VBScript.Regexp
|
|||
|---|---|---|---|
|
#18+
Antonariy Можно решать в несколько шагов, как в моем примере. можно, в самом деле. Мне просто подумалось, что легче указать то, что должно остаться, чем гадать чего там не должно быть. Сказано - сделано :-). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2008, 16:31 |
|
||
|
Отличия регэкспов в php и VBScript.Regexp
|
|||
|---|---|---|---|
|
#18+
Просто номера документов - понятие растяжимое, поэтому мне подумалось, что лучше сначала удалить то, что гарантированно ими не является. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2008, 16:38 |
|
||
|
Отличия регэкспов в php и VBScript.Regexp
|
|||
|---|---|---|---|
|
#18+
ну так на твоей стороне неоспоримое преимущество - знание формата обрабатываемого текста. В итоге-то главное чтоб работало правильно :-). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2008, 16:56 |
|
||
|
Отличия регэкспов в php и VBScript.Regexp
|
|||
|---|---|---|---|
|
#18+
illionнужно отрицание шаблона целиком, а не некоторого диапазона символов, но regExp такого не позволяет (точнее сказать, я не знаю можно ли в принципе такое сделать :) ). (?!pattern) Например - \D(?!2008)(?:\d{4})\D Если я правильно понял, о чем речь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2008, 17:56 |
|
||
|
|

start [/forum/topic.php?fid=22&msg=35258782&tid=1456449]: |
0ms |
get settings: |
6ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
163ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
67ms |
get tp. blocked users: |
1ms |
| others: | 212ms |
| total: | 484ms |

| 0 / 0 |
