Здравствуйте. Иногда встречаю в регулярных выражениях два плюсика подряд ++ что это значит? Один плюсик я знаю что такое. Используется когда нужно одно или более совпадений. А что значит Два плюсика? Спасибо
да и мало где нужно. В тоннах проверок гигабайтов строк среди которых большая их часть шаблону не соответствует — там, к примеру, будет заметен выигрыш сверхжадного ++ против +.
Я просто вообще слабо вкурил пример, где стоит вторая кавычка, но при этом супержадный хавает до конца строки, а не до кавычки. Не понял как заранее определить, что он схавает, если он правила не учитывает.
выигрыш получается в скорости, из за того что при работе движка нет ненужных откатов, для проверки других вариантов. но использовать их с умом тоже нужно уметь. зачастую нельзя применять слишком общие описания шаблона(. \S и т.д.) т.е. нужно как можно конкретнее описывать то что мы ищем. чтобы ничего лишнего не попало под шаблон. и тогда отсутствие откатов даст прирост скорости. правила все соблюдаются точно также. сверхжадные работают также как жадные. т.е. подшаблон будет жрать строку до тех пор пока она подходит под описанное правило подшаблона. А как только пойдет чтото неподходящее, то начнет проверяться сразу следующая часть регулярки. а жадные бы еще раз сделали откат - и посмотрели может то что подходит под следующий подшаблон УЖЕ есть в том что мы съели.
на самом деле поиск идет совсем непоследовательно. там куча ветвлений и откатов может быть в зависимости от сложности рег выражения. тоесть движек пребирает всё множество возможных вариантов, ища в строке каждый вариант.
Это я знаю. Добавлено спустя 9 минут 55 секунд: из статьи короче я походу въехал. если ему сказать "жри все любые символы", то он любые все и сожрёт, какие вообще есть. поэтому он вторую кавычку захавает. Добавлено спустя 4 минуты 37 секунд: у меня просто движочек мой на регулярках работает. но и так вполне быстро. но можно поискать, где соптимизировать.
да. и жадные и сверхжадные схавают всё до конца. встретив Конец строки- - жадные увидят, а в шаблоне же еще есть последняя кавычка, и сделают откат . тоесть из УЖЕ СЪЕДЕНЕГО еще раз проверят - а последняя там была не кавычка ли? увидят что кавычка - всё. конец обработки. строка сматчилась! - сверхжадные увидят, а в шаблоне же еще есть последняя кавычка, но отката делать не будут. но это УЖЕ конец строки, сравнивать больше нечего, а в шаблоне еще несматчилась последняя кавычка. значит всё. конец обработки. строка НЕсматчилась!
окей, в жадные частично врубился. вот дальше там по статье: я не понимаю, он хочет найти текст типа Код (Text): ололо "лалала \"жужужу\" пыщпыщ" упячка вот типа экранированные кавычки пропустить хочет. но я это выражение и объяснение не понял. Т.е. он ищет только заслешенные символы получается?
/" ( \\. | [^"\\] )* "/x Это выражение не рабочее, а если бы и было рабочее, то скорее он тут убирает \"жужужу\" и оставляет только получается 2 найденных в кавычках: [0] => "лалала" [1] => "пыщпыщ" Причем при всем они оба будут в кавычках. Срань короче.