php preg_match and ereg syntax difference
Я обнаружил, что синтаксис preg_match()
and the deprecated ereg()
это отличается.
Например:
я думал так
preg_match('/^<div>(.*)</div>$/', $content);
означает так же, как
ereg('^<div>(.*)</div>$', $content);
but I was wrong. preg_match()
doesn't include special characters as enter like ereg()
делает.
So I started to use this syntax:
preg_match('/^<div>([^<]*)</div>$/', $content);
but it isn't exactly the same to what I need.
Can anyone suggest me how to solve this problem, without using deprecated functions?
1 ответ
Для разбора HTML я бы предложил прочитать этот вопрос и выбрать встроенное расширение PHP.
Если по какой-либо причине вам нужно или вы хотите использовать RegEx, вы должны знать, что:
preg_match()
жадный маленький педераст, и он будет пытаться съесть что- нибудь(.*)
пока он не заболеет (то есть достигнет предела рекурсии или возврата). Вы измените это сU
модификатор 1.двигатель рассчитан на питание одной линии. Вы измените это с
m
или жеs
Модификаторы 1.используя ваш " не <персонаж "
([^<]*)
hack хорошо выполняет свою работу, так как заставляет двигатель останавливаться при первом < char, но будет работать только если<div>
не содержит других тегов внутри!
ref: 1 PCRE Модификаторы