2013-09-27 4 views
1

В настоящее время я работаю над защитой своего чата AJAX от эксплойтов, проверяя весь текст в PHP до его передачи клиенту. До сих пор я был успешным с моей миссией, за исключением одной части, где мне требуется сопоставить наборы тегов изображений.Соответствующие наборы тегов в PHP с регулярным выражением

В целом, я хочу, чтобы он подобрал любой экземпляр того, что есть символ новой строки между установленными тегами, которые у меня есть, но решение, которое у меня есть, является жадным и соответствует символам новой строки вне тегов, а также если есть несколько наборов тегов.

На данный момент у меня есть следующее, который работает, если я хотел, чтобы соответствовать только [img]{newline}[/img]

if(preg_match('/\[\bimg\].*\x0A.*\[\/\bimg\]/', $text)){ //code } 

Но если бы я хотел сделать [img]image.jpg[/img]{newline}[img]image.jpg[/img], он видит только самые первые и закрывающие теги, которые я не хочу.

Так что теперь я спрашиваю, как вы его соответствующим образом сопоставляете с каждым набором тегов?

Редактировать: для уточнения. Любые символы новой строки внутри тегов плохие, поэтому я хочу их обнаружить. Любые символы новой строки вне тегов хороши, и я хочу их игнорировать. Причина в том, что если клиент обрабатывает символ новой строки внутри тега, он сбой.

ответ

2

Просто сделайте это ungreedy, поставив ? после двух .*

Но обратите внимание, что текущее решение не будет соответствовать этому:

[img] 
look, two newlines! 
[/img] 

Я не знаю, почему вы хотите это сделать, но вы можете сделать . соответствие новым строкам, добавив модификатор s к вашему регулярному выражению. Тогда это только "(\[img\](.*?)\[/img\])is", чтобы соответствовать этому, и вы даже можете захватить эту группу и индивидуально проверить ее для новых строк, если хотите.

+0

я уже пытался размещения? после. * перед тем, как это все еще совпало. Я считаю, что вы неправильно поняли мой вопрос, поэтому я добавил разъяснения. – KF4

Смежные вопросы