Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.21.248.47] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Как в строке $strText
заменить последовательности: [ABC=abc] на нечто типа [QWE="abc"] Знаю, можно как-то притулить регулярные выражения... но вот как? опыта не умею... не знаю... |
Сообщ.
#2
,
|
|
|
не совсем понятно задание?
нужно конкретно именно ABC=abc менять на QWE="abc" или это целые классы выражений, т.е. XXX=xxx -> YYY="xxx" где X - любая большая буква латиницы, x - любая маленькая, Y- какая-то наперед заданная? |
Сообщ.
#3
,
|
|
|
[quoteнужно конкретно именно ABC=abc менять на QWE="abc"[/quote]
Да. Конкретно на конкретно. |
Сообщ.
#4
,
|
|
|
Ты можеш просто читать строку и искать в ней эту последовательность а потом менять..
Все функции нужные для этого есть в PHP Manual @ PHP. Помойму без этого мануала вообще некуда деватся. |
Сообщ.
#5
,
|
|
|
Согласен, но сделать первый шаг помогите, плиз...
Перерыть кучу функций, разобраться какие из них хуже/луше... А нужно: 1. Найти № символа с которого начинается в заданной строке $strOrg искомая $strMy1 2. Заменить подстроку $strMy1 на строку $strMy2 в строке $strOrg - это сделает str_replace( $strMy1, $strMy2, $strOrg); Но только она заменит ВСЕ вхождения $strMy1 в $strOrg, а мне нужно только одно! 3. Вставить строку $strMy3 с нужной позиции в строку $strOrg Как эти вещи поделать? Хэлп, плиз. |
Сообщ.
#6
,
|
|
|
1. strpos ( $strOrg, $strMy1 );
2. Ничего лучше чем $out = substr ( $strOrg, 0, strpos( $strOrg, $strMy1)) . $strMy2 . substr ( strstr ( $strOrg ) , strlen ( $strMy1 )) 3. $out = substr ( $strOrg, 0, $pos ) . $strMy3 . substr ( $strOrg , $pos) |
Сообщ.
#7
,
|
|
|
preg_replace("/ABC=abc/", "QWE=\"abc\"", $strText, 1); Работает, если я правильно понял то что ты хочешь сделать. Заменяет первое вхождение. Если надо все, опусти последний параметр. |
Сообщ.
#8
,
|
|
|
Дело в том, что abc - заранее неизвестно, это как бы передаваемый параметр...
|
Сообщ.
#9
,
|
|
|
Так тебя же спросили тебе точно надо заменить или нет. А теперь оказывается что ты не знаешь, что конкретно надо заменить.
тогда тебе надо использовать это preg_replace("/ABC=abc/", "QWE=\"abc\"", $strText, 1); но вместо abc подставь свою строку, только обработай ее на предмет всяких спец символов. Для этого функция есть, в разделе работы с регулярными выражениями. там же где preg_replace |
Сообщ.
#10
,
|
|
|
Ну тогда что-то типа
preg_replace("/ABC=".addslashes($search)."/", "QWE=\"abc\"", $strText, 1); Только я не уверен что он все символы проэкранирует... |
Сообщ.
#11
,
|
|
|
И откуда мне этот
$search Вот ты попробуй в этом форуме вставить урл-адрес при помощи кнопки http:// Получишь что-то такое: [ URL = http:// abc ]My Webpage[ / URL ] Вот тебе пример того, что в качестве $search, может быть что угодно... результирующая строка ляжет в БД, а при извлечении её вот эти квадратные корявки [ URL ] будут заменены на <A HREF="... Как такое сделать? Добавлено в : Цитата SergeS, 28.04.04, 23:14 1. strpos ( $strOrg, $strMy1 ); 2. Ничего лучше чем $out = substr ( $strOrg, 0, strpos( $strOrg, $strMy1)) . $strMy2 . substr ( strstr ( $strOrg ) , strlen ( $strMy1 )) 3. $out = substr ( $strOrg, 0, $pos ) . $strMy3 . substr ( $strOrg , $pos) Наверное лучшего не придумаешь... Хоть и медленно, но надёжно. Так? |
Сообщ.
#12
,
|
|
|
Теперь понятно чего ты хочешь
Я просто сначала не понял Вот тебе решение твоей проблемы: preg_replace("/ABC=(\S+)/", "QWE=\"\\1\"", $strText, 1); А вот например из [ URL = http:// abc ]My Webpage[ / URL ] <a href="http://abc">My Webpage</a> $strText = "[ URL=http://abc]My Webpage[/URL]"; $out = preg_replace( "/\[\s*URL\s*=\s*(\"|\'|)([^\s\"]+)\\1\s*\](.*)\[\s*\/URL\s*\]/", "<a href=\"\\2\">\\3</a>", $strText ); |
Сообщ.
#13
,
|
|
|
УУУУУУ....
а не мог бы ты расшифровать "/ABC=(\S+)/" и "QWE=\"\\1\"" Что обозначают символ "/", в частности здесь: /ABC А символ "\" - "\S"??? |
Сообщ.
#14
,
|
|
|
vil,
а как последнее отнесётся к [URL=http://someurl/" onclick="....] |
Сообщ.
#15
,
|
|
|
Цитата Budda @ 29.04.04, 17:24 УУУУУУ.... а не мог бы ты расшифровать "/ABC=(\S+)/" и "QWE=\"\\1\"" Что обозначают символ "/", в частности здесь: /ABC А символ "\" - "\S"??? 2Budda / - начало и конец регулярки \S любой непробельный символ \" - просто экранированая двойная кавычка как символ \\1 - результат поиска первого субпатерна в данном случае \S+, то есть любое количество >0 непробельных символов. А вообще это все перловские регулярки, почитай Regular Expressions. 2SergeS хреново он отнесется, в принципе такой задачи не стояло, но если надо то вот держи: $strText = "[ URL=http://abc]My Webpage[/URL]"; $out = preg_replace( "/\[\s*URL\s*=\s*(\"|\'|)([^\s\"]+)\\1\s*(.*)\](.*)\[\s*\/URL\s*\]/", "<a href=\"\\2\" \\3>\\4</a>", $strText ); ЗЫ Ты перед http специально не поставил кавычку? ЗЗЫ2 все-таки наверное правильнее с твоей стороны было бы написать $strText="[URL=http://someurl/\" onclick=\"....\" ]...[/URL]" А то я долго не мог понять что значат двойные кавычки. |