Форум программистов, компьютерный форум, киберфорум
PHP: RegExp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
 Аватар для Fantom2209
30 / 30 / 20
Регистрация: 28.02.2014
Сообщений: 195

Замена слов в тексте

19.02.2016, 00:31. Показов 3192. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Есть массив слов и переменная с неким текстом. Нужно заменить все вхождения слов из массива на ссылки.

Пример массива:
PHP
1
2
3
4
5
6
$cat =[
        ["name"=>"На глаза","url"=>"1.php"],
        ["name"=>"реакция","url"=>"2.php"],
        ["name"=>"Снегурочка","url"=>"3.php"],
        ["name"=>"суперпредложение","url"=>"4.php"]
        ];
Примерный код:

PHP
1
2
3
4
5
6
7
8
9
10
$description = "text";
        for($i = 0; $i < 4; $i++){
        echo "<p>",createLink($description, $cat[$i]['name'], $cat[$i]['url']),"</p>";
        echo "</hr>";
    }
    
    function createLink($text, $name, $link)
    {
        return ereg_replace (регулярка , "<a href='$link'>$name</a>" , $text);
    }
Помогите составить регулярку для поиска слов из массива в тексте.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.02.2016, 00:31
Ответы с готовыми решениями:

Замена слов в тексте
uses crt; var str:string; word1,word2:string; len,position:byte; begin writeln('Введите слово-образец:'); readln(word1); ...

Замена слов в тексте
Народ всем привет вот опять задачу не могу решить прошел недавно тему векторов вот после нее задача чесно говоря векторы не очень понел так...

Замена слов в тексте
Добрый вечер! Подскажите как реализовать: необходимо пройтись по тесту найти заданные слова, заменить слова на данные и потом...

6
Эксперт PHP
 Аватар для Fedor Vlasenko
936 / 693 / 236
Регистрация: 01.02.2015
Сообщений: 1,848
19.02.2016, 00:44
Цитата Сообщение от Fantom2209 Посмотреть сообщение
и переменная с неким текстом
Текст приведите исходный. И какой должен быть результат. (текст)
0
 Аватар для Fantom2209
30 / 30 / 20
Регистрация: 28.02.2014
Сообщений: 195
19.02.2016, 01:06  [ТС]
Poznakomlus, к примеру текст: "В PHP используется название PCRE (Perl Compatible Regular Expressions -
перл совместимые регулярные выражения). В этой статье я постараюсь раскрыть
потенциал это мощного инструмента программиста. Не пытайтесь понять все сразу,
впитывайте порциями и приходите за добавкой."

массив к примеру такой:
PHP
1
2
3
4
   $cat =[
        ["name"=>"регулярные выражения","url"=>"1.php"],
        ["name"=>"PHP","url"=>"2.php"],
        ];
на выходе должны получить строку:

В <a href="2.php">PHP</a> используется название PCRE (Perl Compatible Regular Expressions -
перл совместимые <a href="1.php">регулярные выражения</a>). В этой статье я постараюсь раскрыть
потенциал это мощного инструмента программиста. Не пытайтесь понять все сразу,
впитывайте порциями и приходите за добавкой.

То есть мы должны найти все слова (name) из массива в тексте и сделать их ссылками. Важно. Если в массиве к примеру дано слово "Стол", то "столИК" нам не подходит.
0
Эксперт PHP
 Аватар для Fedor Vlasenko
936 / 693 / 236
Регистрация: 01.02.2015
Сообщений: 1,848
19.02.2016, 01:20
PHP
1
2
3
4
5
6
7
$arr =['PHP', 'регулярные выражения'];
$replace = ['<a href="2.php">PHP</a>', '<a href="1.php">регулярные выражения</a>'];
$text =  "В PHP используется название PCRE (Perl Compatible Regular Expressions -
перл совместимые регулярные выражения). В этой статье я постараюсь раскрыть потенциал это мощного инструмента программиста. Не пытайтесь понять все сразу,
впитывайте порциями и приходите за добавкой.";
 
echo str_replace($arr, $replace, $text);
1
 Аватар для Fantom2209
30 / 30 / 20
Регистрация: 28.02.2014
Сообщений: 195
19.02.2016, 01:39  [ТС]
Poznakomlus, Нет, не подходит. Массив заполняется с БД и элементов там может быть много. С регулярками не знаешь как сделать?

Добавлено через 7 минут
Poznakomlus, И плюс если делать так, то слово "PHPH" станет "<a href=''>PHP<a>H". А мне так не нужно.

Добавлено через 2 минуты
Poznakomlus, Что б ты понимал зачем это. Мы в тексте ищем имена категорий и делаем ссылки на эти категории.
0
Эксперт PHP
 Аватар для Fedor Vlasenko
936 / 693 / 236
Регистрация: 01.02.2015
Сообщений: 1,848
19.02.2016, 02:10
Лучший ответ Сообщение было отмечено Fantom2209 как решение

Решение

PHP
1
2
3
4
5
6
7
8
$arr = ['PHP' => '2.php', 'регулярные выражения' => '1.php'];
$text = "В PHP используется название PCRE (Perl Compatible Regular Expressions -
перл совместимые регулярные выражения). В этой статье я постараюсь раскрыть потенциал это мощного инструмента программиста. Не пытайтесь понять все сразу,
впитывайте порциями и приходите за добавкой. PHPH";
$regex = '/([^a-zа-яA-ZА-ЯёЁ]|^)(' . implode('|', array_keys($arr)) . ')([^a-zа-яA-ZА-ЯёЁ]|$)/u';
echo preg_replace_callback($regex, function ($matches) use ($arr) {
    return $matches[1] . '<a href="' . $arr[$matches[2]] . '">' . $matches[2] . '</a>' . $matches[3];
}, $text);
0
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
19.02.2016, 02:10
Fantom2209, самы простой способ - это пройтись циклом:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$cat =[
    ["name"=>"На глаза","url"=>"1.php"],
    ["name"=>"реакция","url"=>"2.php"],
    ["name"=>"Снегурочка","url"=>"3.php"],
    ["name"=>"суперпредложение","url"=>"4.php"]
];
$text = 'Натянула Снегурочка суперпредложение, но реакция бабушки, была неоднозначной: "На глаза мне не попадайся!"';
foreach($cat as $v){
    $text = preg_replace('/'.$v['name'].'/iu', '<a href="'.$v['url'].'">'.$v['name'].'</a>', $text);
}
echo $text;
// результат
Натянула <a href="3.php">Снегурочка</a> <a href="4.php">суперпредложение</a> на одно место, но <a href="2.php">реакция</a> бабушки, была неоднозначной: "<a href="1.php">На глаза</a> мне не попадайся!"
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.02.2016, 02:10
Помогаю со студенческими работами здесь

Замена слов в тексте на изображения
Здравствуйте! Прошу помощи - каким образом можно заменить определенные слова из (вставленного) текста на изображения? Как я понимаю -...

Замена определенных слов в тексте
Добрый вечер. Хотелось бы узнать какими функциями здесь руководствоваться лучше. Написать программу анти-мат. Чтобы когда человек...

Замена всех слов в тексте
Мне необходимо, чтобы при загрузке страницы в элементе div.Article конструкция {{USERNAME}} заменялась на значение переменной $username ...

Замена полных слов в тексте
Подскажите алгоритм замены слова в тексте. Есть класс class myText { private: AnsiString asText; } Вводится текст в мемо, и...

Замена матерных слов в тексте Delphi
Надо сделать программу которая берет из 1кнопкой загружает из текстового документа слова(маты), записывает их в мемо(допустим 2), потом ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru