Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Регулярное выражение, проблема с "жадностью"
|
|||
|---|---|---|---|
|
#18+
Есть текст: Код: html 1. 2. 3. Необходимо выделить этементы типа <h1>***</h1><div>***</div>, т.е. результатом должно быть 2 строки: Код: html 1. 2. Моё регулярное выражение: Код: html 1. В результате находит 2 соответствия: Код: html 1. 2. Не могу понять, почему захватывается текст <h1>text1</h1> ? Код PHP: Код: php 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2014, 22:08 |
|
||
|
Регулярное выражение, проблема с "жадностью"
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2014, 23:42 |
|
||
|
Регулярное выражение, проблема с "жадностью"
|
|||
|---|---|---|---|
|
#18+
Jeka-x87 Не могу понять, почему захватывается текст <h1>text1</h1> ? Потому что фрагмент <h1>text1</h1><h1>text2</h1> отлично подходит под шаблон <h1>.*?<\/h1> , потому как точка - это любой символ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2014, 23:44 |
|
||
|
Регулярное выражение, проблема с "жадностью"
|
|||
|---|---|---|---|
|
#18+
vkle, Не знаю почему именно так происходит, но дело в символе "/". Регулярка: <h1>[a-zA-Z0-9<>_]*?<\/h1><div> Результат: Array ( [0] => Array ( [0] => <h1>text2</h1><div> [1] => <h1>text3</h1><div> ) ) Регулярка: ]<h1>[a-zA-Z0-9<>_\/]*?<\/h1><div> Результат: Array ( [0] => Array ( [0] => <h1>text1</h1><h1>text2</h1><div> [1] => <h1>text3</h1><div> ) ) И это не баг, в JavaScript так же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2014, 12:21 |
|
||
|
Регулярное выражение, проблема с "жадностью"
|
|||
|---|---|---|---|
|
#18+
Может как-то так попробовать? Код: php 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2014, 13:56 |
|
||
|
Регулярное выражение, проблема с "жадностью"
|
|||
|---|---|---|---|
|
#18+
Хотя... Если задача состоит только в том, чтобы проигнорировать в итоговом массиве первую строку из трех исходных, я бы наверно сделал експлод текста в массив, а потом выкинул из него нулевой элемент. Или исходный текст в одной строке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2014, 14:00 |
|
||
|
Регулярное выражение, проблема с "жадностью"
|
|||
|---|---|---|---|
|
#18+
слушай, профессор, давай подругому. ты хочешь сказать что результат не соответсвует твоему выражению??? или идём другим путём. ты указал ленивую хвантификацию, ок идём регуляркой по тексту. сразу должно быть тег н1, к счастью он сначала и есть, потом лениво ищем любые символы за которым должен ити тег зкрытия. ок...ищем , находим тег закрытия(н1) и дальше должен стоять тег див - опа, а у нас другой тег н1 стоит. счего парсер должен решить, ах вот оно как, надо забыть теперь про тег н1 первый, пан профессор не хотел его находить? тоесть у меня регулярка a.*?bc.*?d и текст a1ba2bc3d вот обясни на пальцах, почему под эту регулярку не должна попасть вся строка, а только часть a2bc3d ??? тоесть я к тому, что возьмём за основу, твоя регулярка не однозначная. более того, рузельтат выводиться логичным. ибо регулярки ищут максимальной длинны совпадение, я имею ввиду, что в большинстве случаев при двузначном толковании, будет найден тот вариант что длиннее. ревнивая жадная ленивая ....это лишь влияет на порядок сканирования строки. жадная при поиске .*a - сначала захватит всю строку, потом будет отпускать по одному символу, пока не встретит а ленивая, сначала захватит 0 символов, потом будет брать по одному сиволу пока не встретит а с єтим мы согласимся оба. но у тебя после .*? стоит не а, а стоит аб (несколько статичных символов) щитай что это один символ, ленивая ищет(и таки оно ищет весь статичный кусок!!!! тоесть <h1>.*?<\/h1><div> алгоритм идентичен a.*?b ищем первый статичный кусок, нашли, берём ноль символов, смотрим - дальше стоит статичный кусок? нет, один символ под точку со звездой ушол, теперь стоит второй статичный кусок.... и так до тех пор пока не найдёт понимаешь??? это ты акцентируешь внимание на закрытии открытии тега. для машины, есть подстрока начала, дальше что угодно, подсрока середины, дальше что угодно, и подстрока окончания начало = <h1> что-то середина <\/h1><div> что-то концовка </div> вот что ты задал, вот оно тебе и нашло. оно бы искало как хочешь ты, если бы поиск шол справа на лево по строке :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2014, 14:24 |
|
||
|
|

start [/forum/topic.php?fid=23&fpage=72&tid=1462218]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 229ms |
| total: | 362ms |

| 0 / 0 |
