Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Тексты > регулярные выражения


Автор: AlDev 25.5.2006, 21:41
люди, помогите плиз написать регулярки для вытаскивания адреса и текста ссылки из строки...
например из 
Код

$str = "<a href=\"bla\">blabla</a>";

получить переменные:
Код

$linkUrl = 'bla';
$linkName = 'blabla';

PS: ссылка встречается один раз, но как слева так и справа от нее может быть что угодно
PPS: как я понимаю, присвоить значения переменным можно через eval, так? 

Автор: Mal Hack 25.5.2006, 23:16
http://forum.vingrad.ru/index.php?showtopic=46685 

Автор: AlDev 26.5.2006, 09:54
thanks
а имя ссылки? т.е. то, что между <a href... ></a>? 

Автор: Mal Hack 26.5.2006, 12:15
ТАм <a ...>(.+?)</a>
Поищи, было. 

Автор: smartov 26.5.2006, 12:23
Код

$s = '<P>sadfsdf</p><a href="myvermuchcoolurl?sdfsd=asd">Url text</a>ывафыва<span>asd</span>';

preg_match('/<a href=\"([^"]*)">([^<]*)<\/a>/', $s, $matches);
echo "<pre>";
print_r($matches);


Результат

Код

<pre>Array
(
    [0] => <a href="myvermuchcoolurl?sdfsd=asd">Url text</a>
    [1] => myvermuchcoolurl?sdfsd=asd
    [2] => Url text
)
  

Автор: Валера 11.7.2006, 21:38
У меня вопрос:
(Не совсем в тему(не про ссылку), но поиск выдал столько тем с таким названием, что я решл очередную не плодить)
Мне нужно найти 
Код
\"

в определенной переменной и заменить на 
Код
&quot;


Для этого я использую функцию eregi_replace но она ничего не меняет. Может я что то не так написал? (Ответа в своей настольной книге по PHP я не нашел) Помогите, товарищи!
Пример проблемы:
Код

$itog="<tr><td>рыба \"рыба\"</td><td>one. 445</td><td>col. 2</td><td>it. 890</td></tr>";
$itog=eregi_replace("\\\"", "&quot;", $itog);
 

Автор: BobiKK 12.7.2006, 08:41
А если по-простому, через str_replace? Это будет гораздо быстрее
Код

$itog="<tr><td>рыба \"рыба\"</td><td>one. 445</td><td>col. 2</td><td>it. 890</td></tr>";
$itog = str_replace("\"", "&quot;", $itog);
 

Автор: LOBsTerr 12.7.2006, 08:49
Я извиняюсь, но тоже еще одну тему плодить не стал...
Задача - Поступает строка содержащая любой количество цифр, например -1323123123123, надо отображать только первые 8 символов, остальные должны менятся на звездочки, то есть должно получиться 13231231*****.
То есть каждый символ последовавший после этих восьми должен быть заменен *. Кто знает помогите. 

Автор: BobiKK 12.7.2006, 09:12
Код

<?php
$str = "1323123123123";
$len = strlen($str);
if ($len >= 8)
    $str = substr($str, 0, 8);
for ($i = $len; $i > 8; $i--)
    $str .= "*";
echo $str;
?>

Проверь, может я там что напортачил 

Автор: ZlojEzh 12.7.2006, 09:15
что-то вроде этого:
Код

$res_str = substr($src_str,0,8).str_repeat('*',max(strlen($src_str)-8,0));
 

Автор: izvrat 12.7.2006, 09:26
/<a href=\"([^"]*)">([^<]*)<\/a>/

- гонево полнешее! тут проскакивает много ваирантов - если во ссылке вложеные теки, есл иесть еще атрибуты....

 я бызделал так

/<a(\s[^>]*)?\shref\s*=\s*([\'"]([^\'"]*)|([^\'"\s]*))(\s[^>]*)?>(.*)<\/a\s*>/i

где href = $3$4
text = $6

ясно? 

Автор: LOBsTerr 12.7.2006, 09:56
Спасибо BobiKK
Но я хотел с помощью регулярок )) 
Вот нашел ответ
Код

<?php echo preg_replace('/(?<=\d{8})\d/', '*', '123123123123213123');?>
 

Автор: Валера 16.7.2006, 13:37
BobiKK, 
Цитата

А если по-простому, через str_replace? 

В принципе помогает, но у меня не всегда именно такие параметры замены. То есть, например сейчас мне надо найти один или больше подряд идущих слешей и одну кавычку, а у меня Регулярные выражения ничего не заменяют. Подскажите, может я неправильно составил шаблон?
Код

$spec="\\\\\" Столичная \\\" \\\\\"Водяра\\\"";
$spec=ereg_replace("\\+\"", "&quot", $spec);
echo $spec;

Еще я попробовал так:
Код

$spec=ereg_replace("(\\)+\"", "&quot", $spec);

Но он выдает ошибку - Warning: ereg_replace(): REG_EPAREN in x:\home\test1.ru\www\php\update.php on line 12 
 

Автор: Wolf1994 16.7.2006, 17:35
4Валера:
Код

<?php
$spec='\\\\\" Ñòîëè÷íàÿ \\\" \\\\\"Âîäÿðà\\\" \\" ';
print htmlspecialchars (preg_replace ('/[\\\]+\"/', "&quot;", $spec));
?>
  

Автор: Валера 17.7.2006, 23:19
Спасибо большое! Правда 
Код

print htmlspecialchars (preg_replace ('/[\\\]+\"/', "&quot;", $spec));

Выдавал довольно странный результат, а вот 
Код

preg_replace ('/[\\\]+\"/', "&quot;", $spec);

то, что надо. Благодарю за помощь.
 

Автор: Greendrake 10.8.2006, 14:56
Подскажите, как вырезать из текста комментарии типа
Код
/* bla bla bla */

Никак не догоняю как в регвыре заложить условие не "*/".

Автор: smartov 10.8.2006, 17:59
Greendrake, 

Код

$str = <<<END
Hello
/* bla sdk*fjh */
Bye
END;
echo preg_replace('/\/\*(.*)(\*\/+)/Us', '', $str);

Автор: Greendrake 11.8.2006, 11:14
Хорошо, но почему если
Код
$str = <<<END
Hello
/* bla sdk*fjh */
kjsdhf sal */
Bye
END;
echo preg_replace('/\/\*(.*)(\*\/+)/', '', $str);
то удаляется только строчка 3, а если
Код
$str = <<<END
Hello
/* bla sdk*fjh */ kjsdhf sal */
Bye
END;
echo preg_replace('/\/\*(.*)(\*\/+)/', '', $str);
 - то удаляется до последнего */ ?
К тому же, судя по подсветке, тут на форуме другая рега юзается.

Автор: ZlojEzh 11.8.2006, 11:20
захватывает до последнего '*/' - потому что не используется модификатор 'U'
не захватывает перевод строки - не указан модификатор 's'

для корректного вырезания комментов надо использовать оба

Автор: smartov 11.8.2006, 11:31
Цитата(Greendrake @  11.8.2006,  10:14 Найти цитируемый пост)
то удаляется только строчка 3, а если


Цитата(ZlojEzh @  11.8.2006,  10:20 Найти цитируемый пост)
хватывает до последнего '*/' - потому что не используется модификатор 'U'не захватывает перевод строки - не указан модификатор 's'

Совершенно верно. 
Поправил регу.

Автор: gogzor 21.9.2006, 23:27
Привет люди!
У меня есть ссылка - <a href="xxxxxxxxxxxxxxxxxxxx"> , надо найти этот xxxxxxxxxxxxxx , но как???
Я пробовал регулярки которые тут выкладывали , но не помогает ... Дело в том , что м этой ссылке содержаться не только буквы и цифры , а ещё и : % и прочее добро..

Я пробовал этот код:

Код

   preg_match('/<a href=\"([^"]*)">([^<]*)<\/a>/', $s, $matches);
   echo "<pre>";
   print_r($matches);


но он не помогает....

плиз скажите как сделать....

П.С Сылка примерно такая :
<a href="http://212.111.210.10/script.php?pupu=7OBDXbjzl4EgtIqJNyS8wNoLeuzQjv87c5aSSbFXLwG5KifPQNE%2BK3DphfjYYq2SQHN9y74HAvd53KAwE3WKdIsbSIsOPU1DnJI1NbyTggmPgjziFL5qfMFKJNwyKowNV%2FfeNmP8Zla1rO2UT%2FvqVkZZdD%2BEqqtqoeLN9RAVin3nS3iTteZSqmKbbml8ePBGVKYM%2Fg%2Blq6jnalGLGyyHgjUQEvVmvVTINU1vO8iNoMQBNIpzP6ELysshvXCdbswOe6i1JIRjOTR39RYR2tEWylimhsNGAiW4XLpIrLABcrs3KxSLGWgFW99coQ2bwu%2FWPGyI260Do7cLD%2F3ppFyJcA%2BvpXNDsGvgh10m1BR2M5dVdAla6iVHK%2FQrqil1KfzCsjzlf1BGNm6PVLEb%2F2CqkeEXXVm0dc1XxBS0iGs%2FOiBIk%2F8jCOugd1ovhNMnK8eKxjkWNbCtCVdkqMuvHIPKFZmsPIE%2FE2vo3P7fpJH3XbxRgksveY50gDb4iSaWUW%2FjSZp6kjQ3y1OjEdSaZ5ldXrzp%2Bb21iKS1P31ADpYiGrXUqphXhDghZUgga%2BRgMv6NAI%2BqoSAgaGQYQE2s3y4UDQa7gl1Kq4KFijfrl%2Bj0mZcDJmnkAm8YpYA7YQTwzM6cVF%2FxYo7Go5iKkjFW%2BaVlsJG0prYt8tLZ93k4b442vBiG52AWnKpdDBTb1YapofxvqpC8UhaUmFdw9234w5QMIWOR4lGKyO5DgZvU8uwHk2GaeWF%2BOj9GY3OGUxWqlf5TWpVMQfuBLpWco7K3%2BzukgDpyiOc%2BmYlFYvUPWN%2FRf4n4qtMoxeTUsbFkFLAZtKk%2BVUTG%2BSGjzpAb743j6lU9kSPkHf5ljKLfYtsqje6bMks%3D">

Автор: Wolf1994 21.9.2006, 23:45
Код

preg_match_all ('/<a.+href="(.*)".*>/Usi', $s, $matches);
print_r ($matches)

Автор: smartov 22.9.2006, 12:04
gogzor, товарищ, там же видно что в регулярке полная ссылка, а у тебя пол-тега только. Где сам текст ссылки? Где закрытие тега </a>? Естественно ничего работать не будет.
Надо немного переделать регулярку и все сразу заработает.

Код

preg_match('/<a href=\"([^"]*)">/', $s, $matches);
echo "<pre>";
print_r($matches);

Автор: gogzor 22.9.2006, 18:38
Спасибо за помощь!
Подскажите плиз где можно почитать подробно про все знаки и модификаторы regexp (на русском) ?

Автор: smartov 22.9.2006, 23:42
gogzor, 
Цитата(gogzor @  22.9.2006,  17:38 Найти цитируемый пост)
Подскажите плиз где можно почитать подробно про все знаки и модификаторы regexp (на русском) ?

http://php.paco.net/manual/ru/reference.pcre.pattern.syntax.php

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)