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 Модификаторы

Другие вопросы по тегам