Вырезать регуляркой
Помогите написать регулярку. Нужно вырезать из переменной $text все значения ширины типа ' width="ЧЮБОЕ_ЗНАЧЕНИЕ"'. Как я понимаю регуляркой это возможно?
|
alert( ('dsfsdfds width="ЧЮБОЕ_ЗНАЧЕНИЕ" dsfsd width="5px"fds' .match(/ width="[^"]*"/g) || []).join('\n') ); |
Riim,
Спасибо большое! Только мне надо было для PHP. Я модифицировал вот так: $text = preg_replace("' width=\".*?\"'si", '',$text); вроде тоже правильно? |
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
для более сложных задач можно парсить html, для этого есть следующие вещи: http://ua.php.net/manual/en/book.dom.php , http://blog.fedecarg.com/2008/08/07/...-jquery-style/ , или можно просто погуглить на тему "html parser php" p.s. а зачем понадобилось из строки вырезать ширину? Откуда эта строка берется? |
Цитата:
|
Riim,
И все же я не понял принципиальной разницы :( Если квантификатор "жадный", то движок начинает "набирать" на него совпадение, набирает-набирает, пока не упрется, потом идет дальше. Если в процессе он видит, что совпадение невозможно в таком варианте, он "отпускает" один символ от жадного кв-ра и снова топает по проторенному пути. Если квантификатор "нежадный", то движок хватает первое попавшееся совпадение и радостный топает дальше. Если не может найти совпадение -- возвращается, пробует добавить символ, и потом топать дальше. Где принципиальная разница? |
Цитата:
Вот такая строка: '0123456789012345678901234567890123456789012345678 9012345678901234567890123456789mail@mail.ru' С жадностью: /[^a-z]*[^0-9]+/ Здесь что бы регулярке сдвинуться на один символ вправо нужно сделать всего одно действие: примерить этот символ к [^a-z] Без жадности: /[^a-z]*?[^0-9]+/ Что бы сдвинуться на один символ вправо нужно сначала примерить символ к [^0-9] и если не подходит, то тогда уже примерять к [^a-z]. Т. е. два действия. Пока тормозит всего в 2 раза сильней, и теперь заменяем в обоих случаях [^0-9]+ на что-нибудь посложней, вроде того: RegExp.eMail = '[0-9a-z][.\\-\\w]{20}@(?:[0-9a-z][\\-0-9a-z]*[0-9a-z]\\.)+[a-z]{2,6}'; Регулярка с жадностью сначала вберет в себя все цифры и далее !один! раз примерит RegExp.eMail к 'mail@mail.ru' . Регулярка без жадности будет примерять RegExp.eMail много-много раз и это примирение уже довольно тяжелое. зы: если кто-нибудь попросит объяснить сначала, то мне придется сделать себе харакири. |
просто чем отличаются эти два варианта: тем, что жадная регулярка сначала найдет самое жадное совпадение. Что общего: обе регулярки будут для каждого символа проверять шаблон, жадная - с конца, нежадная - с начала. Т.е. расклады могут быть разные. Так что имхо неочевидно, что быстрее
|
Цитата:
|
x-yuri, +1
Из вики: Цитата:
/a[\w\d]*\d/.test('a1bcdefghjk') -- схватили первое 'a', потом залезли в конец и начали отматывать аж до 'b'. Нежадный схватил бы пустую строку, не нашел за ней цифру, взял 'b' и готово. |
Цитата:
|
Цитата:
Цитата:
Цитата:
Цитата:
А раз результаты на тестируемом тексте разные, значит сравнивать производительность таким тестом не корректно. Цитата:
|
Результаты разные? А запускать не пробовали?
>>> /a[\w\d]*\d/.test('a1bcdefghjk') true >>> /a[\w\d]*?\d/.test('a1bcdefghjk') true В варианте 2 и Вы, и я сказали то же самое :) А вот в варианте 1 именно отматывается Kolyaj, Цитата:
|
Конец максимального совпадения тоже еще найти надо. Но вы правы в том, что нужно просто знать, где какой квантификатор использовать.
|
Цитата:
Ладно, сдаюсь :) . |
Часовой пояс GMT +3, время: 12:02. |