2015-03-04 3 views
0

Я Вань заменить динамические ссылки в тексте с текстом, как:
если ссылкиЗаменить динамические ссылки на PHP

<a href="show.php?id=3">Number three</a> 
<a href="show.php?id=4">Number four</a> 
<a href="show.php?id=1">StackOverflow</a> 
<a href="view.php?id=9">Foo</a> 

Я хочу, чтобы это вернулся

Number three 
Number four 
StackOverflow 
<a href="view.php?id=9">Foo</a> 

Что будет идеальным регулярное выражение для этого я пробовал несколько регулярных выражений, но они просто не работают.
EDIT:

Строка содержит другие ссылки, как view.php?id=5 и я не хочу, чтобы заменить их.

+0

Вы можете использовать следующее регулярное выражение, чтобы захватить содержимое '' теги: '] +> ([^ <>] +) <\/a> '. –

+0

@IdidntKnewIt, пожалуйста, объясните краевой кейс вместе с примером. –

ответ

2

Это должно работать:

$regex = '~<a href="show.php\?id=\d+">([^<]*)</a>~Ui'; 
$output = preg_replace($regex, '$1', $input); 
+0

Обратите внимание, что если тег 'a' содержит какое-либо форматирование не в этом регулярном выражении (например, идентификатор, имя, классы или любой другой атрибут в любом другом порядок), то это ничего не заменит. Более безопасная ставка заключается в том, чтобы пойти с парсером HTML. – h2ooooooo

+1

@ h2ooooooo Зачем усложнять, когда OP точно заявляет о своем вводе и желаемом выходе? Иногда мне кажется, что люди из SO будут использовать обширные DOM-парсеры, чтобы просто заменить текстовый узел тега «», потому что у нас есть парсер DOM, который нам нужно использовать ». Я предоставил самый простой и быстрый способ достичь этого. – <span class="text-secondary"> <small> <a rel="noopener" target="_blank" href="https://stackoverflow.com/users/3720605/">Forien</a></span> <span></span> </small> </span> </p> </div> </div> </div> <div itemprop="comment" class="post-comment"> <div class="row"> <div class="col-lg-1"><span class="text-secondary">+0</span></div> <div class="col-lg-11"> <p class="commenttext">@Forien То, что я пытался сказать. – <span class="text-secondary"> <small> <a rel="noopener" target="_blank" href="https://stackoverflow.com/users/4268741/">IdidntKnewIt</a></span> <span></span> </small> </span> </p> </div> </div> </div> </div> </div> </article> <div> <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6208739752673518" data-ad-slot="4319274062" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <article class="board-top-1 padding-top-10"> <div class="post-col vote-info"> <span class="count">0<i class="fa fa-thumbs-up"></i></span> </div> <div class="post-offset"> <div class="answer fmt"> <p>Вы должны использовать отрицательное регулярное выражение на основе опережения.</p> <pre><code class="prettyprint-override"><a href="(?!view\.php\?id=\d+")[^"]*">([^<>]*)</a> </code></pre> <p><a href="https://regex101.com/r/yN7mR6/3" rel="nofollow">DEMO</a></p> <pre><code class="prettyprint-override">$re = "~<a href=\"(?!view\\.php\\?id=\\d+\")[^\"]*\">([^<>]*)</a>~m"; $str = "<a href=\"show.php?id=3\">Number three</a>\n<a href=\"show.php?id=4\">Number four</a>\n<a href=\"show.php?id=1\">StackOverflow</a>\n<a href=\"view.php?id=9\">Foo</a>"; $subst = "$1"; $result = preg_replace($re, $subst, $str); </code></pre> </div> <div class="post-info"> <div class="post-meta row"> <p class="text-secondary col-lg-6"> <span class="source"> <a rel="noopener" target="_blank" href="https://stackoverflow.com/q/28850469">источник</a> </span> </p> <p class="text-secondary col-lg-6"> <span class="float-right date"> <span>2015-03-04 09:11:29</span> </p> <p class="col-12"></p> <p class="col-12"></p></div> </div> <!-- comments --> <div class="comments"> <div itemprop="comment" class="post-comment"> <div class="row"> <div class="col-lg-1"><span class="text-secondary">+0</span></div> <div class="col-lg-11"> <p class="commenttext">Почему нисходящий? – <span class="text-secondary"> <small> <span></span> </small> </span> </p> </div> </div> </div> <div itemprop="comment" class="post-comment"> <div class="row"> <div class="col-lg-1"><span class="text-secondary">+0</span></div> <div class="col-lg-11"> <p class="commenttext">Ваше решение лучше, так как это заменит атрибуты '' '' '' '' ', но мне это не нужно сейчас, и регулярное выражение Forien делает то, что я хочу. – <span class="text-secondary"> <small> <a rel="noopener" target="_blank" href="https://stackoverflow.com/users/4268741/">IdidntKnewIt</a></span> <span></span> </small> </span> </p> </div> </div> </div> <div itemprop="comment" class="post-comment"> <div class="row"> <div class="col-lg-1"><span class="text-secondary">+0</span></div> <div class="col-lg-11"> <p class="commenttext">Я исправил это, не знаю, кто это сделал? – <span class="text-secondary"> <small> <a rel="noopener" target="_blank" href="https://stackoverflow.com/users/4268741/">IdidntKnewIt</a></span> <span></span> </small> </span> </p> </div> </div> </div> </div> </div> </article> <article class="board-top-1 padding-top-10"> <div class="post-col vote-info"> <span class="count">1<i class="fa fa-thumbs-up"></i></span> </div> <div class="post-offset"> <div class="answer fmt"> <pre><code class="prettyprint-override">$html = ' <a href="show.php?id=3">Number three</a> <a href="show.php?id=4">Number four</a> <a href="show.php?id=1">StackOverflow</a> <a href="view.php?id=9">Foo</a> '; $doc = new DOMDocument(); $doc->loadHTML($html); foreach ($doc->getElementsByTagName("a") as $a) { if (strpos($a->getAttribute("href"), "show.php") === 0) { echo $a->nodeValue . "\n"; } else { echo $doc->saveHTML($a) . "\n"; } } </code></pre> <p>выведет:</p> <pre><code class="prettyprint-override">Number three Number four StackOverflow <a href="view.php?id=9">Foo</a> </code></pre> </div> <div class="post-info"> <div class="post-meta row"> <p class="text-secondary col-lg-6"> <span class="source"> <a rel="noopener" target="_blank" href="https://stackoverflow.com/q/28850603">источник</a> </span> </p> <p class="text-secondary col-lg-6"> <span class="float-right date"> <span>2015-03-04 09:18:33</span> <a rel="noopener" target="_blank" href="https://stackoverflow.com/users/732284/">rid</a></span> </p> <p class="col-12"></p> <p class="col-12"></p></div> </div> </div> </article> </div> <div class="clearfix"> </div> <div class="relative-box"> <div class="relative">Смежные вопросы</div> <ul class="relative_list"> <li> 1. <a href="http://ru.voidcc.com/question/p-hfadawob-bmn.html" target="_blank" title="Динамические ссылки с PHP"> Динамические ссылки с PHP </a> </li> <li> 2. <a href="http://ru.voidcc.com/question/p-ribkpcvn-pr.html" target="_blank" title="динамические ссылки с использованием php"> динамические ссылки с использованием php </a> </li> <li> 3. <a href="http://ru.voidcc.com/question/p-bbsoepwv-bgq.html" target="_blank" title="PHP динамические предыдущие/следующие ссылки"> PHP динамические предыдущие/следующие ссылки </a> </li> <li> 4. <a href="http://ru.voidcc.com/question/p-yuuuagba-bdx.html" target="_blank" title="Ссылки на динамические DNS"> Ссылки на динамические DNS </a> </li> <li> 5. <a href="http://ru.voidcc.com/question/p-ehxyibyt-ct.html" target="_blank" title="php заменить значение ссылки"> php заменить значение ссылки </a> </li> <li> 6. <a href="http://ru.voidcc.com/question/p-cnqqedjp-xs.html" target="_blank" title="Динамические ссылки на рабочий лист"> Динамические ссылки на рабочий лист </a> </li> <li> 7. <a href="http://ru.voidcc.com/question/p-oxcfyaoi-hb.html" target="_blank" title="событие «Фокус» на динамические ссылки"> событие «Фокус» на динамические ссылки </a> </li> <li> 8. <a href="http://ru.voidcc.com/question/p-xfznhchn-tq.html" target="_blank" title="Ant: ссылки на динамические свойства"> Ant: ссылки на динамические свойства </a> </li> <li> 9. <a href="http://ru.voidcc.com/question/p-tbxxxyps-bhb.html" target="_blank" title="Динамические ссылки в php и mysql"> Динамические ссылки в php и mysql </a> </li> <li> 10. <a href="http://ru.voidcc.com/question/p-oqmxbmtb-qs.html" target="_blank" title="Как хранить динамические ссылки на части текста"> Как хранить динамические ссылки на части текста </a> </li> <li> 11. <a href="http://ru.voidcc.com/question/p-xdeowgft-cy.html" target="_blank" title="Заменить буквы динамические"> Заменить буквы динамические </a> </li> <li> 12. <a href="http://ru.voidcc.com/question/p-zllzdahz-dx.html" target="_blank" title="Динамические ссылки в Drupal"> Динамические ссылки в Drupal </a> </li> <li> 13. <a href="http://ru.voidcc.com/question/p-yfqllgqs-xq.html" target="_blank" title="CakePHP Полностью динамические ссылки"> CakePHP Полностью динамические ссылки </a> </li> <li> 14. <a href="http://ru.voidcc.com/question/p-bbbegezc-qg.html" target="_blank" title="Динамические ссылки и Ajax"> Динамические ссылки и Ajax </a> </li> <li> 15. <a href="http://ru.voidcc.com/question/p-aurkvxtm-bpc.html" target="_blank" title="Динамические ссылки Ember.js"> Динамические ссылки Ember.js </a> </li> <li> 16. <a href="http://ru.voidcc.com/question/p-wycmlylj-pu.html" target="_blank" title="Динамические ссылки хеширования Jekyll"> Динамические ссылки хеширования Jekyll </a> </li> <li> 17. <a href="http://ru.voidcc.com/question/p-nccvhbnh-hb.html" target="_blank" title="Динамические навигационные ссылки"> Динамические навигационные ссылки </a> </li> <li> 18. <a href="http://ru.voidcc.com/question/p-ufxlbeqc-cx.html" target="_blank" title="Динамические ссылки Django NoReverseMatch"> Динамические ссылки Django NoReverseMatch </a> </li> <li> 19. <a href="http://ru.voidcc.com/question/p-gtcjrmbp-xu.html" target="_blank" title="динамические ссылки/выпадающее меню"> динамические ссылки/выпадающее меню </a> </li> <li> 20. <a href="http://ru.voidcc.com/question/p-erzsuceo-bbw.html" target="_blank" title="Excel Динамические ссылки"> Excel Динамические ссылки </a> </li> <li> 21. <a href="http://ru.voidcc.com/question/p-cttzrfwq-ben.html" target="_blank" title="Динамические ссылки для разных страниц"> Динамические ссылки для разных страниц </a> </li> <li> 22. <a href="http://ru.voidcc.com/question/p-fyxxirqp-hr.html" target="_blank" title="Заменить объект ссылки на объект"> Заменить объект ссылки на объект </a> </li> <li> 23. <a href="http://ru.voidcc.com/question/p-qgucfphv-bds.html" target="_blank" title="Динамические ссылки на фигуры в Sweave"> Динамические ссылки на фигуры в Sweave </a> </li> <li> 24. <a href="http://ru.voidcc.com/question/p-pqygghkg-sm.html" target="_blank" title="Динамические ссылки на отношения «многие-ко-многим»"> Динамические ссылки на отношения «многие-ко-многим» </a> </li> <li> 25. <a href="http://ru.voidcc.com/question/p-hyibumwl-bmu.html" target="_blank" title="динамические ссылки на таблицы с Excel VBA"> динамические ссылки на таблицы с Excel VBA </a> </li> <li> 26. <a href="http://ru.voidcc.com/question/p-fmkfonmi-hu.html" target="_blank" title="Как заменить ссылки href в php"> Как заменить ссылки href в php </a> </li> <li> 27. <a href="http://ru.voidcc.com/question/p-ygueglcz-tx.html" target="_blank" title="PHP: preg_replace заменить аббревиатуру, используя обратные ссылки"> PHP: preg_replace заменить аббревиатуру, используя обратные ссылки </a> </li> <li> 28. <a href="http://ru.voidcc.com/question/p-hawpjheb-vu.html" target="_blank" title="как заменить результат ССЫЛКИ регулярных выражений PHP"> как заменить результат ССЫЛКИ регулярных выражений PHP </a> </li> <li> 29. <a href="http://ru.voidcc.com/question/p-arzdjufx-boc.html" target="_blank" title="Как заменить ССЫЛКИ регулярных выражений PHP"> Как заменить ССЫЛКИ регулярных выражений PHP </a> </li> <li> 30. <a href="http://ru.voidcc.com/question/p-yaruozpg-bcy.html" target="_blank" title="PHP - Выходной массив, Преобразовать ссылки, String Заменить"> PHP - Выходной массив, Преобразовать ссылки, String Заменить </a> </li> </ul> </div> <div> <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-6208739752673518" data-ad-slot="3534119089"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="padding-top-10"></div> </div> </div> <script type="text/javascript" src="http://img2.voidcc.com/voidso/script/side.js?t=1652515422009"></script> <script type="text/javascript" src="http://img2.voidcc.com/voidso/plugin/highlight/highlight.pack.js"></script> <link href="http://img2.voidcc.com/voidso/plugin/highlight/styles/docco.css" media="screen" rel="stylesheet" type="text/css" /> <script type="text/javascript"> $('pre').each(function(i, e) { hljs.highlightBlock(e, "<span class='indent'> </span>", false) }); </script> <div class="col-lg-3 col-md-4 col-sm-5"> <div id="rightTop"> <div class="row"> <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <!-- VOIDCC问答侧边栏广告 --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6208739752673518" data-ad-slot="3862022848" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="row sidebar panel panel-default"> <div class="panel-heading font-bold"> Последний вопрос </div> <div class="m-b-sm m-t-sm clearfix"> <ul class="side_article_list"> <li class="side_article_list_item"> 1. <a href="http://ru.voidcc.com/question/p-yzhvyode-baa.html" target="_blank" title="правила изображения всегда возвращает ошибку в Laravel"> правила изображения всегда возвращает ошибку в Laravel </a> </li> <li class="side_article_list_item"> 2. <a href="http://ru.voidcc.com/question/p-qirnrsli-yu.html" target="_blank" title="onchange выпадающий список из базы данных - php, без java или ajax"> onchange выпадающий список из базы данных - php, без java или ajax </a> </li> <li class="side_article_list_item"> 3. <a href="http://ru.voidcc.com/question/p-xaqxqtti-wu.html" target="_blank" title="Serilog перезаписать файл"> Serilog перезаписать файл </a> </li> <li class="side_article_list_item"> 4. <a href="http://ru.voidcc.com/question/p-oehzajdj-qx.html" target="_blank" title="Java 1.8.121 не работает на linux - NoClassDefFoundError"> Java 1.8.121 не работает на linux - NoClassDefFoundError </a> </li> <li class="side_article_list_item"> 5. <a href="http://ru.voidcc.com/question/p-swomaaxu-pg.html" target="_blank" title="Apache Zeppelin (Shiro Security) не может сохранять разрешения на запись"> Apache Zeppelin (Shiro Security) не может сохранять разрешения на запись </a> </li> <li class="side_article_list_item"> 6. <a href="http://ru.voidcc.com/question/p-pszgqdzk-py.html" target="_blank" title="Определен ли режим по умолчанию для реализации потока?"> Определен ли режим по умолчанию для реализации потока? </a> </li> </ul> </div> </div> </div> <p class="article-nav-bar"></p> <div class="row sidebar article-nav"> <div class="row box_white visible-sm visible-md visible-lg margin-zero"> <div class="top"> <h3 class="title"><i class="glyphicon glyphicon-th-list"></i> Смежные вопросы</h3> </div> <div class="article-relative-content"> <ul class="side_article_list"> <li class="side_article_list_item"> 1. <a href="http://ru.voidcc.com/question/p-hfadawob-bmn.html" target="_blank" title="Динамические ссылки с PHP"> Динамические ссылки с PHP </a> </li> <li class="side_article_list_item"> 2. <a href="http://ru.voidcc.com/question/p-ribkpcvn-pr.html" target="_blank" title="динамические ссылки с использованием php"> динамические ссылки с использованием php </a> </li> <li class="side_article_list_item"> 3. <a href="http://ru.voidcc.com/question/p-bbsoepwv-bgq.html" target="_blank" title="PHP динамические предыдущие/следующие ссылки"> PHP динамические предыдущие/следующие ссылки </a> </li> <li class="side_article_list_item"> 4. <a href="http://ru.voidcc.com/question/p-yuuuagba-bdx.html" target="_blank" title="Ссылки на динамические DNS"> Ссылки на динамические DNS </a> </li> <li class="side_article_list_item"> 5. <a href="http://ru.voidcc.com/question/p-ehxyibyt-ct.html" target="_blank" title="php заменить значение ссылки"> php заменить значение ссылки </a> </li> <li class="side_article_list_item"> 6. <a href="http://ru.voidcc.com/question/p-cnqqedjp-xs.html" target="_blank" title="Динамические ссылки на рабочий лист"> Динамические ссылки на рабочий лист </a> </li> <li class="side_article_list_item"> 7. <a href="http://ru.voidcc.com/question/p-oxcfyaoi-hb.html" target="_blank" title="событие «Фокус» на динамические ссылки"> событие «Фокус» на динамические ссылки </a> </li> <li class="side_article_list_item"> 8. <a href="http://ru.voidcc.com/question/p-xfznhchn-tq.html" target="_blank" title="Ant: ссылки на динамические свойства"> Ant: ссылки на динамические свойства </a> </li> <li class="side_article_list_item"> 9. <a href="http://ru.voidcc.com/question/p-tbxxxyps-bhb.html" target="_blank" title="Динамические ссылки в php и mysql"> Динамические ссылки в php и mysql </a> </li> <li class="side_article_list_item"> 10. <a href="http://ru.voidcc.com/question/p-oqmxbmtb-qs.html" target="_blank" title="Как хранить динамические ссылки на части текста"> Как хранить динамические ссылки на части текста </a> </li> </ul> </div> </div> </div> </div> </div> </div> </div><!-- wrap end--> <!-- footer --> <footer id="footer"> <div class="bg-simple lt"> <div class="container"> <div class="row padder-v m-t"> <div class="col-xs-8"> <ul class="list-inline"> <li><a href="http://ru.voidcc.com/contact">Свяжитесь с нами</a></li> <li>© 2020 RU.VOIDCC.COM</li> <li><a rel="nofollow" href="https://beian.miit.gov.cn/" target="_blank">沪ICP备13005482号-13</a></li> <li><script type="text/javascript" src="https://s9.cnzz.com/z_stat.php?id=1280098168&web_id=1280098168"></script></li> <li><a href="http://cn.voidcc.com/" target="_blank" title="程序问答园区">简体中文</a></li> <li><a href="http://hk.voidcc.com/" target="_blank" title="程序問答園區">繁體中文</a></li> <li><a href="http://ru.voidcc.com/" target="_blank" title="поле вопросов и ответов">Русский</a></li> <li><a href="http://de.voidcc.com/" target="_blank" title="Frage - und - antwort - Park">Deutsch</a></li> <li><a href="http://es.voidcc.com/" target="_blank" title="Preguntas y respuestas">Español</a></li> <li><a href="http://hi.voidcc.com/" target="_blank" title="कार्यक्रम प्रश्न और उत्तर पार्क">हिन्दी</a></li> <li><a href="http://it.voidcc.com/" target="_blank" title="IL Programma di chiedere Park">Italiano</a></li> <li><a href="http://ja.voidcc.com/" target="_blank" title="プログラム問答園区">日本語</a></li> <li><a href="http://ko.voidcc.com/" target="_blank" title="프로그램 문답 단지">한국어</a></li> <li><a href="http://pl.voidcc.com/" target="_blank" title="program o park">Polski</a></li> <li><a href="http://tr.voidcc.com/" target="_blank" title="Program soru ve cevap parkı">Türkçe</a></li> <li><a href="http://vi.voidcc.com/" target="_blank" title="Đáp ứng viên">Tiếng Việt</a></li> <li><a href="http://fr.voidcc.com/" target="_blank" title="Programme interrogation Park">Française</a></li> </ul> </div> </div> </div> </div> </div> </footer> <!-- / footer --> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-77509369-5"></script> <script> window.dataLayer = window.dataLayer || []; function gtag() { dataLayer.push(arguments); } gtag('js', new Date()); gtag('config', 'UA-77509369-5'); </script> <script> var _hmt = _hmt || []; (function () { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?67d4731349f0b00136755b80364ce381"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> </body> </html>