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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как добавить к найденной строке другую строку, не заменяя найденную строку?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Rooner
Отправлено: 09 Апреля, 2012 - 16:17:10
Post Id


Посетитель


Покинул форум
Сообщений всего: 291
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




Исходная строка, которая находится в тексте:
CODE (html):
скопировать код в буфер обмена
  1. <label><input type="checkbox" name="status" checked />&nbsp;Отображать</label>

Ищу эту строку:
PHP:
скопировать код в буфер обмена
  1. $form = preg_replace("/<label>.+checkbox.+<\/label>/", "<td></td><td>сюда поставить то что нашел</td>", $form);

Мне не нужно заменять найденную строку, я хочу добавить к ней теги. Как поставить то что нашел в указанное место?
В результате должно получиться:
CODE (html):
скопировать код в буфер обмена
  1. <td></td><td><label><input type="checkbox" name="status" checked />&nbsp;Отображать</label></td>

(Отредактировано автором: 09 Апреля, 2012 - 16:18:55)

 
 Top
EuGen Администратор
Отправлено: 09 Апреля, 2012 - 16:23:29
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




PHP:
скопировать код в буфер обмена
  1. $form = '<label><input type="checkbox" name="status" checked /> Отображать</label>';
  2. $form = preg_replace("/<label>(.+checkbox.+)<\/label>/U", "<td></td><td>$1</td>", $form);
  3. //var_dump($form);

?


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Rooner
Отправлено: 09 Апреля, 2012 - 16:30:30
Post Id


Посетитель


Покинул форум
Сообщений всего: 291
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




EuGen, спасибо, работает Улыбка
Но всеже вот так правильней, потому что теги label тоже нужны
PHP:
скопировать код в буфер обмена
  1. $form = preg_replace("/(<label>.+checkbox.+<\/label>)/U", "<td></td><td>$1</td>", $form);

(Добавление)
Подскажите почему не работает?
Исходник:
CODE (html):
скопировать код в буфер обмена
  1. <label>Родитель:</label>
  2. <label>Название категории:</label>

Регулярка:
PHP:
скопировать код в буфер обмена
  1. $form = preg_replace("/(<label>\W+<\/label>)/U", "<td>\$1</td>", $form);

Результат должен быть:
CODE (html):
скопировать код в буфер обмена
  1. <td><label>Родитель:</label></td>
  2. <td><label>Название категории:</label></td>

А на деле получаю исходный текст.

(Отредактировано автором: 09 Апреля, 2012 - 16:35:49)

 
 Top
EuGen Администратор
Отправлено: 09 Апреля, 2012 - 16:52:22
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Rooner
Потому что Вы не указываете back-references - круглые скобки.
PHP:
скопировать код в буфер обмена
  1. $form = preg_replace("/(<label>(\W+)<\/label>)/Um", "<td>$1</td>", $form);

- будет работать.
$1 указывает на первую группу, фиксированную (captured) через back-reference. При этом не стоит экранировать знак $ - иначе ссылка не будет восприниматься как ссылка.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Rooner
Отправлено: 09 Апреля, 2012 - 17:00:56
Post Id


Посетитель


Покинул форум
Сообщений всего: 291
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1. $form = preg_replace("/(<label>(\W+)<\/label>)/Um", "<td>\$1</td>", $form);

Даже так не работает.
Зато работает вот с \D вместо \W
PHP:
скопировать код в буфер обмена
  1. $form = preg_replace("/(<label>\D+<\/label>)/U", "<td>\$1</td>", $form);

Но \D выбирает лишнее Огорчение

Хотя вот в калькуляторе регулярок вариант с \W работет как надо.
 
 Top
EuGen Администратор
Отправлено: 09 Апреля, 2012 - 17:02:30
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Rooner
У меня Ваш пример работает корректно. Вероятно, на других данных есть проблемы?


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Rooner
Отправлено: 09 Апреля, 2012 - 17:11:51
Post Id


Посетитель


Покинул форум
Сообщений всего: 291
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




Исходник:
CODE (html):
скопировать код в буфер обмена
  1.   $form = "<label>Родитель:</label>
  2.   <label>Название категории:</label>";

Регулярки которые работают:
PHP:
скопировать код в буфер обмена
  1. $form = preg_replace("/(<label>[йцукенгшщзхъфывапролджэячсмитьбю:ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ ]+<\/label>)/U", "<td>\$1</td>", $form);

PHP:
скопировать код в буфер обмена
  1. $form = preg_replace("/(<label>\D+<\/label>)/U", "<td>\$1</td>", $form);

Регулярки которые не работают:
PHP:
скопировать код в буфер обмена
  1. $form = preg_replace("/(<label>\W+<\/label>)/U", "<td>\$1</td>", $form);

Даже не знаю почему \W+ у меня не работает, вон ту абрукадабру чтоли осталять Хм

(Отредактировано автором: 09 Апреля, 2012 - 17:12:09)

 
 Top
EuGen Администратор
Отправлено: 09 Апреля, 2012 - 17:18:33
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




CODE (htmlphp):
скопировать код в буфер обмена
  1. /(<label>[а-яА-ЯЁё:]+<\/label>)/Um

?


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Rooner
Отправлено: 09 Апреля, 2012 - 17:44:25
Post Id


Посетитель


Покинул форум
Сообщений всего: 291
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




EuGen, что-то у меня какието глюки, во всех браузерах
Вот это работает:
PHP:
скопировать код в буфер обмена
  1.   $form = "<label><label>Название</label>
  2.           <label>Название</label>";
  3.   $form = preg_replace("/(<label>[а-яА-ЯЁё :]+<\/label>)/Um", "<td>\$1</td>", $form);
  4.   echo $form;

Но стоит мне добавить к слову "Название" любую букву, например "Названиец", то регулярка перестает работать Не понял
 
 Top
snikers987
Отправлено: 09 Апреля, 2012 - 22:15:48
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)




Rooner пишет:

PHP:
скопировать код в буфер обмена
  1. $form = preg_replace("/(<label>(\W+)<\/label>)/Um", "<td>\$1</td>", $form);



\W - любой символ, кроме букв, цифр и знака подчеркивания
\w - буква, цифра, знак подчеркивания

(Отредактировано автором: 09 Апреля, 2012 - 22:16:55)



-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
Rooner
Отправлено: 11 Апреля, 2012 - 08:05:50
Post Id


Посетитель


Покинул форум
Сообщений всего: 291
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




Какое регулярное выражение описывает все символы? Есть .+ но оно исключает перенос строки \n
Как добавить в эту регулярку перенос строки, или указать что между selectами может быть все что угодно?
PHP:
скопировать код в буфер обмена
  1. $form = preg_replace("/(<select.+<\/select>)/Um", "<td>\$1</td>", $form);
 
 Top
EuGen Администратор
Отправлено: 11 Апреля, 2012 - 09:08:09
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Rooner
PHP:
скопировать код в буфер обмена
  1. $form='<select
  2. name="test"
  3. id="reg"></select>';
  4. $form = preg_replace("/(\<select.+\<\/select\>)/Ums", "<td>$1</td>", $form);
  5. //var_dump($form);

?


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Rooner
Отправлено: 11 Апреля, 2012 - 09:30:57
Post Id


Посетитель


Покинул форум
Сообщений всего: 291
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




EuGen, спасибо, все работает.
Вот собственно результат, всех моих вопросов в данной теме:
http://forum.php.su/topic.php?fo...ostid=1334125789
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB