garip sonuçlar dönen preg_match'in

3 Cevap php

Ben URL'ler için bir dize arıyorum ... ve benim preg_match benim demo dize bana kibrit bir miktarını yanlış veriyor.

Dize:

Hey orada, www.example.com benim sitesini kontrol gelmek

Fonksiyon:

preg_match("#(^|[\n ])([\w]+?://[\w]+[^ \"\n\r\t<]*)#ise", $string, $links);
echo count($links);

Sonuç 3 olarak çıkar.

Herkes bana bu çözmeye yardımcı olabilir? Regex yeniyim.

3 Cevap

$links olan array of sub matches,

matches is provided, then it is filled with the results of search. $matches[0] will contain the text that matched the full pattern, $matches[1] böylece ilk yakalanan parantez dizilimi ve eşleşen metin var olacaktır.

İki grupta maçlar artı tam düzenli ifadenin üç maç dizi öğeleri sonuçlanır.

Belki de, tüm kullanarak maçları preg_match_all istiyorum.

Eğer (Bamya önerilen), preg_match_pattern kullanıyorsanız, bu dize karşı regex çalıştırırsanız, bu çapa niteliğin değerini "href" yanı sıra, bu durumda bir comtain olur bağlantılı Metin maç olacak hem de unutmayın url. Bu iki maç yapar.

Bu resultset'de bir array_unique çalıştırmak akıllıca olur :)

Nasıl kullanılacağı hakkında tavsiyeler ek olarak preg_match, ben kullandığınız düzenli ifade ile ciddi bir yanlış bir şey olduğuna inanıyorum. Bunun yerine böyle bir şey çalışıyor isteyebilirsiniz:

 preg_match("_([a-zA-Z]+://)?([0-9a-zA-Z$-\_.+!*'(),]+\.)?([0-9a-zA-Z]+)+\.([a-zA-Z]+)_", $string, $links);

(Sorgu dizesi üst düzey etki sonra olsaydı o iş olmaz rağmen) bu en davalarını gerekir. http://www.regular-expressions.info/ ve özellikle http://regexpal.com/ bunları yazıyoruz bunları test için: düzenli ifadeler yazarken gelecekte, ben yardım etmek için aşağıdaki web siteleri öneririz.