Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как указать символы с которы не должна начинаться/заканчиваться маска.
 
 автор: not detected   (27.01.2008 в 16:35)   письмо автору
 
 

есть маска (.*?) . Нужно чтоб в результат не попадала подстрока которая начинается и заканчивается кавычками ". Как правильно написать?

   
 
 автор: not detected   (27.01.2008 в 16:37)   письмо автору
 
   для: not detected   (27.01.2008 в 16:35)
 

Пробовал так ((?<!").*?(?!")) но чего то не работает :(

   
 
 автор: kasmanaft   (27.01.2008 в 19:39)   письмо автору
 
   для: not detected   (27.01.2008 в 16:37)
 

Должно работать... покажите что имеете и что хотите получить на выходе.

   
 
 автор: not detected   (28.01.2008 в 05:47)   письмо автору
 
   для: kasmanaft   (27.01.2008 в 19:39)
 

имеем [a href=url_линка]название_линка[/a] .
Нужно заменить на <a href="url_линка">название линка</a>.
Замена должна происходить только в том случаем если href в первом случаем ([а href]...[/а]) не начинается и не заканчивается кавычками.
Вот я делаю так
$str=preg_replace('/\[a href=((?<!").*?(?!"))\](.*?)\[\/a\]/','<a href="\\1">\\2</a>',$str);
И всё равно происходит замена, и кавычки захватываются подмаской.

   
 
 автор: kasmanaft   (28.01.2008 в 07:21)   письмо автору
 
   для: not detected   (28.01.2008 в 05:47)
 

Ага.. попробуйте вот так: ((?!").*?(?<!"))

   
 
 автор: not detected   (28.01.2008 в 07:37)   письмо автору
 
   для: kasmanaft   (28.01.2008 в 07:21)
 

>Ага.. попробуйте вот так: ((?!").*?(?<!"))
Пробовал и так
$str=preg_replace('/\[a href=((?!").*?(?<!"))\](.*?)\[\/a\]/','<a href="\\1">\\2</a>',$str); 
. Все равно заменяется если есть кавычки :(
Пробовал также через альтернативы:
\w.*?|\..*?|\/.*?
Работает только если строка начинается с буквы, точки или слеШа (мне в принципе это и надо). Но нужно чтоб ещё в конце не было кавычки.

   
 
 автор: kasmanaft   (28.01.2008 в 07:53)   письмо автору
 
   для: not detected   (28.01.2008 в 07:37)
 

Хм...
<?php
$str 
"имеем [a href=url_линка]название_линка[/a] [a href=\"url_линка\"]название_линка[/a] 
[a href=\"url_линка]название_линка[/a] [a href=url_линка\"]название_линка[/a] "
;

echo 
preg_replace('/\[a href=((?!").*?(?<!"))\](.*?)\[\/a\]/','<a href="\\1">\\2</a>',$str);
?>


PS а в чем смысл этого всего? Может быть сделать вот так:
/\[a href="?(.*?)"?\](.*?)\[\/a\]/

   
 
 автор: not detected   (28.01.2008 в 08:25)   письмо автору
 
   для: kasmanaft   (28.01.2008 в 07:53)
 

>PS а в чем смысл этого всего?
-смысл?! Делаю теги :)


>Может быть сделать вот так:
/\[a href="?(.*?)"?\](.*?)\[\/a\]/

- а про это я даже и не подумал:) . Спасибо.
И все равно интересно почему у меня на работают утверждения.

   
 
 автор: kasmanaft   (28.01.2008 в 08:40)   письмо автору
 
   для: not detected   (28.01.2008 в 08:25)
 

Ну, если интересно, давайте разберемся. Тот код, что я привел чуть выше, у вас работает?
Если нет - тода не знаю в чем дело :).
Если работает, дайте пример, где не работает...

Можно попробовать вместо ((?!").*?(?<!")) написать ((?!")[^\]]*?(?<!")). Может быть, проблема в этом.

   
 
 автор: not detected   (28.01.2008 в 09:06)   письмо автору
 
   для: kasmanaft   (28.01.2008 в 08:40)
 

>Ну, если интересно, давайте разберемся. Тот код, что я привел чуть выше, у вас работает?
Создал отдельный файл и закинул туда этот код, и работает:) . Заменилась только первая ссылка.
Но почему то в другом месте, где собственно и будет применяться данная функция, заменяются все ссылки.
//Кажется понял в чем глюк:) . У меня сначала идёт фильтрация и потом замена тегов. В результате фильтрации кавычки заменяются на html эквиваленты (функция htmlspecialchars ). Щас попробую поправить :)

   
 
 автор: not detected   (28.01.2008 в 09:33)   письмо автору
 
   для: not detected   (28.01.2008 в 09:06)
 

Угу, теперь все работает
/\[a href=((?!"|&quot;|\'|&#039;).*?(?<!"|&quot;|\'|&#039;))\](.*?)\[\/a\]/

Спасибо:) .

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования