Yardım Hacking Gruber'ın Liberal URL Regex

3 Cevap php

Ben Liberal URL Regex from Daring Fireball, some of Alan Storm improvements ile birleşti ve parantez içinde IDN karakter için destek gibi bazı hatalar tespit yolumu kesmek aldım. Bu benim ettik budur:

/(?:[\w-]+:\/\/?|www[.])[^\s()<>]+(?:(?:\([^\s()<>]*\)[^\s()<>]*)+|[^[:punct:]\s]|\/)/

Ancak ben çözmek mümkün değilim bir hata karşılaştı:

'www.dsd(sd)sdsd.com' // can also be the valid 'www.dsd.com/whatever(whatever)'

Yukarıdaki URL www.dsd(sd)sdsd.com' (veya www.dsd.com/whatever(whatever)') yerine olarak kabul ediliyor www.dsd(sd)sdsd.com (veya www.dsd.com/whatever(whatever)). Bu yalnızca URL aşağıdaki URL beri, parantez olduğunda ne gibi görünüyor:

'www.sampleurl.com'

Doğru olarak kabul ediliyor www.sampleurl.com.

Ben URL ben bir süre için çalışıyor ettik ama bir çözüm bulmak için görünmüyor olabilir, parantez olduğunda regex ve the [^[:punct:]\s]|\/ parçası yürütülüyor olmadığını düşünüyorum. Herkes bana yardımcı olabilir misiniz?

Emtia için, ben regex ve bazı test verileri (son URL başarısız) ile Rubular permalink kurdum.


Örneğin ben bu URL gibi uyuşmuyor Gruber'ın regex, biraz acele olduğunu düşünüyorum:

http://en.wikipedia.org/wiki/Something_(Special)_For_You

Hatta fazla etkilendik hem Gruber ve Alan Bu gerçekten basit yazım hatası cevapsız görerek değilim:

\([\w\d]+\)

Wouldn't \(\w+\) yeterli olacak mı? : S

3 Cevap

Gibi görünüyor Gruber has revised his regular expression:

\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.])(?:[^\s()<>]+|\([^\s()<>]+\))+(?:\([^\s()<>]+\)|[^`!()\[\]{};:'".,<>?«»“”‘’\s]))

Works just fine now.

www.dsd (sd) sdsd.com geçerli bir etki alanı adı değil.

Eğer 'www.dsd.com/whatever(whatever)' olsaydı, doğru kabul edilecek. (Ya da en azından benim testlerde olduğu)

 /(?:[\w-]+:\/\/?|www[.])[^\s()<>]+(?:(?:\([^\s()<>]*\)[^\s()<>]*)+|[^[:punct:]\s]|\/)/
  www.                   |               |            |
                          dsd            |            |
                                          (sd)        |
                                                       sdsd.com'

Ben bu yıkar düşünüyorum nasıl ... Yukarıdaki regex bit (sd) kaçan bir açık paren ile başlar, daha sonra stared karakter sınıfı uyan sd, daha sonra kaçan bir kapanış parantez, ve sonraki şey [^\s()<>]* hangi maçlar sdsd.com'.