Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: вопросик про preg_match_all
Форумы портала PHP.SU » PHP » Программирование на PHP » вопросик про preg_match_all

Страниц (1): [1]
 

1. fl4sh - 20 Декабря, 2009 - 16:38:29 - перейти к сообщению
Такая проблема!
на сайте описан пример
пример (Отобразить)


но когда я пишу, например вот так:
PHP:
скопировать код в буфер обмена
  1. $html = "<b>bold text</b> и <b>click me</b>";

т.е. подряд два одинаковых тега, то мне выдаёт
CODE (text):
скопировать код в буфер обмена
  1. matched: <b>bold text</b> и <b>click me</b>
  2. part 1: <b>
  3. part 2: bold text</b> и <b>click me
  4. part 3: </b>


Само собой мне нужно, чтоб он брал не крайние, а ближайшие!
как это можно сделать?
2. JustUserR - 20 Декабря, 2009 - 21:20:50 - перейти к сообщению
fl4sh Замените квантификатор * или + на *? и +? соответственно - это нежадный квантификатор
3. fl4sh - 20 Декабря, 2009 - 23:05:20 - перейти к сообщению
JustUserR
Спасибо, помогло (:
4. fl4sh - 21 Декабря, 2009 - 11:15:06 - перейти к сообщению
появился ещё один вопросик (:

если, например, у меня вот так:
PHP:
скопировать код в буфер обмена
  1. $html = "<b>\n bold text \n</b><a href=howdy.html>click me</a>";


то мне выдаёт только:

CODE (text):
скопировать код в буфер обмена
  1. matched: <a href=howdy.html>click me</a>
  2. part 1: <a href=howdy.html>
  3. part 2: click me
  4. part 3: </a>


как это исправить? Растерялся
5. JustUserR - 21 Декабря, 2009 - 11:35:09 - перейти к сообщению
fl4sh По умолчанию .* не соответствует символу новой строки - в общем лучше использовать модификатор /igs в концк регулярного выражения
6. fl4sh - 21 Декабря, 2009 - 11:43:14 - перейти к сообщению
/igs выдавал ошибку


помогло /mUsi
(Добавление)
нет, не помогло %)

теперь когда стоит /mUsi, квантификатор *? не замечается и опять берутся не ближайшие, а крайние теги

PHP:
скопировать код в буфер обмена
  1. $html = "<b>\n bold text \n</b> и <b>click me</b>";
  2. preg_match_all("/(<([\w]+)[^>]*>)(.*?)(<\/\\2>)/mUsi", $html, $matches);


получаем:

CODE (text):
скопировать код в буфер обмена
  1. matched: <b>  bold text </b> и <b>click me</b>
  2. part 1: <b>
  3. part 2: bold text </b> и <b>click me
  4. part 3: </b>
7. movEAX - 21 Декабря, 2009 - 14:14:04 - перейти к сообщению
fl4sh пишет:

помогло /mUsi


Ты либо модификатор "U" используй либо "?"; А все вместе это все равно что 1-1 = 0
8. JustUserR - 22 Декабря, 2009 - 00:54:17 - перейти к сообщению
Уберите модификатор /g - он предназначен для опции глобальной замены и в поиске работать не будет (Я немного переборзил с ним) А модификатор /s заставлять подстановки типа любой символ .* сооветстовать любом символу в том числе и символу новой строки (Без этого он соотвествовать не будет) Модфикатор /i отвечает за регистр символов
И не путайте проблемы с .*? и модификаторм /s - это разные вещи

 

Powered by ExBB FM 1.0 RC1