
MrFidge
Obwohl ich seit Jahren PHP verwende, habe ich nie wirklich gelernt, wie man Ausdrücke verwendet, um Strings richtig zu kürzen … was mich jetzt in den Hintern beißt!
Kann mir jemand beim Kürzen helfen? Ich muss den Textteil aus der URL herausschneiden und drehen
<a href="https://stackoverflow.com/questions/1361878/link.html">text</a>
hinein
<a href="https://stackoverflow.com/questions/1361878/link.html"></a>
$str = preg_replace('#(<a.*?>).*?(</a>)#', '$1$2', $str)

karim79
Verwenden von SimpleHTMLDom:
<?php
// example of how to modify anchor innerText
include('simple_html_dom.php');
// get DOM from URL or file
$html = file_get_html('http://www.example.com/');
//set innerText to null for each anchor
foreach($html->find('a') as $e) {
$e->innerText = null;
}
// dump contents
echo $html;
?>
Was ist mit so etwas, wenn man bedenkt, dass Sie es vielleicht mit anderen wiederverwenden möchten? href
S :
$str="<a href="https://stackoverflow.com/questions/1361878/link.html">text</a>";
$result = preg_replace('#(<a[^>]*>).*?(</a>)#', '$1$2', $str);
var_dump($result);
Was dir bringt:
string '<a href="https://stackoverflow.com/questions/1361878/link.html"></a>' (length=24)
(Ich gehe davon aus, dass du im OP einen Tippfehler gemacht hast?)
Wenn Sie keine anderen href-Angaben benötigen, können Sie Folgendes verwenden:
$str="<a href="https://stackoverflow.com/questions/1361878/link.html">text</a>";
$result = preg_replace('#(<a href="https://stackoverflow.com/questions/1361878/link.html">).*?(</a>)#', '$1$2', $str);
var_dump($result);
Was Ihnen auch bringt:
string '<a href="https://stackoverflow.com/questions/1361878/link.html"></a>' (length=24)
Als Randbemerkung: Versuchen Sie für komplexeres HTML nicht, reguläre Ausdrücke zu verwenden: Sie funktionieren gut für diese Art von einfachen Situationen, aber für einen echten HTML-Teil helfen sie im Allgemeinen nicht wirklich: HTML ist es nicht ziemlich “regelmäßig” “genug”, um von Regexes geparst zu werden.

KB22
Sie könnten substring in Kombination mit stringpos verwenden, auch wenn dies kein sehr schöner Ansatz ist.
Überprüfen: PHP Manual – String-Funktionen
Eine andere Möglichkeit wäre, einen regulären Ausdruck zu schreiben, der Ihren Kriterien entspricht. Aber um Ihr Problem schnell zu lösen, reichen die String-Funktionen…
EDIT: Ich habe das Publikum unterschätzt. 😉 Mach weiter mit den Regexes… ^^

mickmackusa
Sie müssen die Tags selbst nicht erfassen. Zielen Sie einfach auf den Text zwischen den Tags und ersetzen Sie ihn durch eine leere Zeichenfolge. Supereinfach.
Demo beider Techniken
Code:
$string = '<a href="https://stackoverflow.com/questions/1361878/link.html">text</a>';
echo preg_replace('/<a[^>]*>K[^<]*/', '', $string);
// the opening tag--^^^^^^^^ ^^^^^-match everything before the end tag
// ^^-restart fullstring match
Ausgabe:
<a href="https://stackoverflow.com/questions/1361878/link.html"></a>
Oder in Randfällen, wenn der Linktext a . enthält <
, benutze das: ~<a[^>]*>K.*?(?=</a>)~
Dies vermeidet die Kosten für das Erfassen von Gruppen mit einem Lazy-Quantifier, dem Neustart des gesamten Strings K
und ein “Vorausschauen”.
Älter und klüger:
Wenn Sie gültiges HTML parsen, sollten Sie aus Stabilitäts-/Genauigkeitsgründen einen dom-Parser verwenden. Regex ist DOM-ignorant, wenn es also einen Tag-Attributwert gibt, der a . enthält >
, mein Snippet wird fehlschlagen.
Als eng geeignete domdocument-Lösung, um etwas Kontext zu bieten:
$dom = new DOMDocument;
$dom->loadHTML($string, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); // 2nd params to remove DOCTYPE);
$dom->getElementsByTagName('a')[0]->nodeValue="";
echo $dom->saveHTML();

Jérôme Verstrynge
Benutz nur strip_tags()
, das würde die Tags loswerden und nur den gewünschten Text dazwischen lassen
.
2618500cookie-checkWie entferne ich Text zwischen Tags in PHP?yes