
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
07.09.2013, 15:31:45
|
|||
|---|---|---|---|
|
|||
regex, поиск группы с greedy квантиф-ром "+": результаты понятны как-то "через раз" |
|||
|
#18+
Здравствуйте. В документации читаем: Differences Among Greedy, Reluctant, and Possessive Quantifiers Greedy quantifiers are considered "greedy" because they force the matcher to read in, or eat, the entire input string prior to attempting the first match . If the first match attempt (the entire input string) fails, the matcher backs off the input string by one character and tries again , repeating the process until a match is found or there are no more characters left to back off from. Depending on the quantifier used in the expression, the last thing it will try matching against is 1 or 0 characters. The reluctant quantifiers, however, take the opposite approach: They start at the beginning of the input string, then reluctantly eat one character at a time looking for a match. The last thing they try is the entire input string. Решил проверить: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Запускаю, при этом ввожу одну и ту же строку: Код: plaintext 1. 2. Результат: не могу понять поведение matcher'a в режиме greedy на шаблонах с не чётной длиной примеры Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
07.09.2013, 19:41:31
|
|||
|---|---|---|---|
regex, поиск группы с greedy квантиф-ром "+": результаты понятны как-то "через раз" |
|||
|
#18+
ozzmosis, Два квантификатора подряд не ставят: Код: java 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
07.09.2013, 19:56:24
|
|||
|---|---|---|---|
|
|||
regex, поиск группы с greedy квантиф-ром "+": результаты понятны как-то "через раз" |
|||
|
#18+
UsmanДва квантификатора подряд не ставятХм... а как же дока ?At first glance it may appear that the quantifiers X?, X ?? and X ?+ do exactly the same thing, since they all promise to match "X, once or not at all". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
07.09.2013, 20:26:50
|
|||
|---|---|---|---|
regex, поиск группы с greedy квантиф-ром "+": результаты понятны как-то "через раз" |
|||
|
#18+
ozzmosisХм... а как же дока ?Стоп. Вру (сорри). Давно не работал с регэспами. Подзабыл. :-Pozzmosisне могу понять поведение matcher'a в режиме greedy на шаблонах с не чётной длинойПопытаюсь объяснить на Ваших же примерах: (ababa)+? ababa b ababa babab (по-одному разу - в итоге замэтчились две группы) abababababab abab (ababab)+ (подряд (одна группа) - захватил (жадно) за один раз сразу две шаблонные подстроки) ababab ababab abab (ababab)+? (по-одному разу - в итоге две группы) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
07.09.2013, 20:50:23
|
|||
|---|---|---|---|
|
|||
regex, поиск группы с greedy квантиф-ром "+": результаты понятны как-то "через раз" |
|||
|
#18+
UsmanПопытаюсь объяснить на Ваших же примерахУвы, но я всё равно не понял, как этот самый матчер работает для случая жадного квантификатора :( Вот описание доки:Greedy quantifiers are considered "greedy" because they force the matcher to read in, or eat, the entire input string prior to attempting the first match. If the first match attempt (the entire input string) fails, the matcher backs off the input string by one character and tries again , repeating the process until a match is found or there are no more characters left to back off from. Вот input-строка: abababababababab и шаблон-группа: aba. Матчер должен сначала хапнуть всю строку и затем проверить, не содержится ли в ней хотя бы один раз шаблон. Ответ будет очевиден: да, содержится. Почему тогда матчер принимается дальше искать в этой строке (как будто бы "If the first match attempt (the entire input string) fails"), вместо того чтобы сразу выдать результат ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
07.09.2013, 21:01:30
|
|||
|---|---|---|---|
regex, поиск группы с greedy квантиф-ром "+": результаты понятны как-то "через раз" |
|||
|
#18+
ozzmosisУвы, но я всё равно не понял, как этот самый матчер работает для случая жадного квантификатора :( (ababa)+ == (можно записать как) (ababa){1,} {1,} - означает, что подстрока (шаблонная группа) должна встретиться как минимум один раз, либо "сколько возможно" раз подряд. В результате получаем несколько подряд ( слитно! ) идущих подстрок (шаблона) -- засчитывается как одно совпадение (match). В этом суть жадности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
07.09.2013, 21:56:42
|
|||
|---|---|---|---|
|
|||
regex, поиск группы с greedy квантиф-ром "+": результаты понятны как-то "через раз" |
|||
|
#18+
UsmanozzmosisУвы, но я всё равно не понял, как этот самый матчер работает для случая жадного квантификатора :( (ababa)+ == (можно записать как) (ababa){1,} {1,} - означает, что подстрока (шаблонная группа) должна встретиться как минимум один раз, либо "сколько возможно" раз подряд. В результате получаем несколько подряд ( слитно! ) идущих подстрок (шаблона) -- засчитывается как одно совпадение (match). В этом суть жадности."Как минимум один раз" - это условие точно становится истинным после первого обнаружения шаблона "ababa" в input-строке. Я главного не понимаю: что ему, матчеру, помешало немедленно остановиться, когда он анализировал input-строку на наличие этой группы и нашёл её там ? Почему он не выкинул для этого варианта то же самое, что и для (abab)+, а пошёл дальше искать и в результате выдал: Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
07.09.2013, 22:43:07
|
|||
|---|---|---|---|
regex, поиск группы с greedy квантиф-ром "+": результаты понятны как-то "через раз" |
|||
|
#18+
ozzmosisЯ главного не понимаю: что ему, матчеру, помешало немедленно остановиться, когда он анализировал input-строку на наличие этой группы и нашёл её там ? Почему он не выкинул для этого варианта то же самое, что и для (abab)+, а пошёл дальше искать Код: java 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=59&mobile=1&tid=2128647]: |
0ms |
get settings: |
19ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
13ms |
get forum data: |
4ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 321ms |
| total: | 474ms |

| 0 / 0 |
