Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.191.68.112] |
|
Сообщ.
#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]" А то я долго не мог понять что значат двойные кавычки. |
Сообщ.
#16
,
|
|
|
vil,
Просто то что я написал выше - продырявливает половину форумов в началах - и без слешов |
Сообщ.
#17
,
|
|
|
Budda, слушай, ты это специально, или прикалываешься? я тебе сначала даже рейтинг хотел понизить.. за полное отсутствие желания разобраться самому, и требования чтобы тебе все разжевали и в рот положили.
ты ж не новичек на форуме, зачем такие глупости городишь? типа "как вывести число на экран в с++" - "просто конкретное число?" " да" - "printf("5"); "нет, а если число неизвестно?" - "printf("%d",num); "а где num брать? а что такое %?" ..... что за даунизм??? почитай мануал, про строковые фукнции php, про регулярные выражения и т.п. тем более это есть на русском (www.php.net, дальше documentation и выбираешь russian) и читать не так много... |
Сообщ.
#18
,
|
|
|
Цитата Budda, слушай, ты это специально, или прикалываешься? я тебе сначала даже рейтинг хотел понизить.. за полное отсутствие желания разобраться самому, и требования чтобы тебе все разжевали и в рот положили. ты ж не новичек на форуме, зачем такие глупости городишь? Прости, что приходится напрягать, нет не прикалываюсь... Но действительно не могу въехать... и мануал читал... Может если бы я больше ничего не знал, то читал бы более вдумчиво, не знаю, может лучше бы дошло... Цитата \S любой непробельный символ \\1 - результат поиска первого субпатерна в данном случае \S+, то есть любое количество >0 непробельных символов. Вот этого и сейчас в мануале не вижу... специально посмотрел ещё раз... Прошу прощения, ещё раз, что напряг сильно... |
Сообщ.
#19
,
|
|
|
Цитата SergeS @ 29.04.04, 20:32 vil, Просто то что я написал выше - продырявливает половину форумов в началах - и без слешов В смысле продырявливает? Моя регекспа просто ничего не меняет..., потому как понятно что ссылка неправильная. При чем что первый, что второй вариант. |
Сообщ.
#20
,
|
|
|
Смотря какой скрипт вложить в онКлик...
|
Сообщ.
#21
,
|
|
|
Цитата Budda @ 30.04.04, 11:08 Цитата \S любой непробельный символ \\1 - результат поиска первого субпатерна в данном случае \S+, то есть любое количество >0 непробельных символов. Вот этого и сейчас в мануале не вижу... специально посмотрел ещё раз... Вот здесь много что написано. Прикреплённый файлregexp.doc (159 Кбайт, скачиваний: 387) |
Сообщ.
#22
,
|
|
|
Цитата Budda, 30.04.04, 11:08 Вот этого и сейчас в мануале не вижу... специально посмотрел ещё раз... какой мануал смотрел? см по функциям preg_match, preg_replace,... все что касается preg (perl regular expressions), там должна быть ссылка на описане этих самых регекспов |
Сообщ.
#23
,
|
|
|
Budda, я изучал регэкспы по этому http://myphp.net.ru/doc/index.php?regexp-intro и этому http://myphp.net.ru/lessons/index.php?14, вошло безболезненно, глянь и ты =).
|
Сообщ.
#24
,
|
|
|
Цитата см по функциям preg_match, preg_replace,... Там только - regular expression, а линка нет. А мануалы хорошие, сенкс... |