Nasıl URL'ler Markdown sözdizimi dönüştürmek, ama zaten Markdown sözdizimi URL'ler ile müdahale değil mi?

2 Cevap php

Ben yazıyorum bir sistem bağlantıları değiştirmek için Markdown kullanır, ama aynı zamanda düz bağlantılar aktif yapmak istiyorum, böylece yazarak http://www.google.com aktif link olacak. Bunu yapmak için, ben adresler bulmak ve Markdown sözdizimi onları yeniden yazmak için bir regex yerine kullanıyorum. Sorun regex de Markdown sözdizimi zaten bağlantıları ayrıştırmak değil alınamıyor olmasıdır.

Ben aşağıdaki kodu kullanarak ediyorum:

$value = preg_replace('@((?!\()https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@', '[$1]($1)', $value);

Bu, http://www.google.com olarak düz bağlantılar için iyi çalışır, ama Markdown biçiminde zaten bağlantıları görmezden gerekir. Ben bölüm (?! () Bir parantez takip adresler eşleşen önlemek düşündüm, ama ben hata olduğumu görünüyor.

Ben (o amele) bile bu ideal bir çözüm olmadığını biliyoruz, ama bu benim regex yeteneklerinin ötesinde bastırıyor.

2 Cevap

I (?<!\() sen ne demek olduğunu düşünüyorum. Maç pozisyon http://www.google.com, bunu kontrol etmeniz gerekir next karakter değil, ama previous biri başında ise. Başka bir deyişle, bir negatif lookbehind, olumsuz bir lookahead gerekir.

regexes bu gibi şeyler de herkesin bildiği gibi kötü, sen düşünce olabilir asla zeki html yararlanan her türlü ile sona olabilir. IMO onları görür gibi bayrak markdown URL'lerinize markdown komut mod gerekir, bu yüzden size kesmek karmaşıklığı bırakmaz çok çok basit bir arama ile tüm bunları bulmak zaman bayraklı URL'leri göz ardı edebilirsiniz.