regex maç ile yardım

3 Cevap php

i bir regex aşağıdaki adresler almak istiyorum:

 HREF="http://www.getty.edu/vow/TGNFullDisplay?find=&place=&nation=&english=Y&subjectid=7009830"

 HREF="http://www.getty.edu/vow/TGNFullDisplay?find=&place=&nation=&english=Y&subjectid=7009830&ptype=PF"

farkı sona eriyor. İlki atlar ve ptype = PF ve sonuncusu da içerir.

Bu desen kullanarak an im:

 protected $uriPattern = '/http:\/\/www\.getty\.edu\/vow\/.*?\?find=&place=&nation=&english=Y&subjectid=......./i';

ama bu sadece ilk için çalışır.

i preg_match_all ikisi maç için regex desen nasıl olur merak ediyorum. yardım için teşekkürler.

3 Cevap

Isteğe bağlı bir parçasıdır Eğer eşleşen dizeleri varsa, sizin durumda (&ptype=PF)?, (optional)? ekleyebilirsiniz.

Bu deneyin

protected $uriPattern = '/http:\/\/www\.getty\.edu\/vow\/.*?\?find=&place=&nation=&english=Y&subjectid=.......(&ptype=PF){0,1}/i';

Ben daha özlü önermek için gidiyordu

"/http://www\.getty\.edu/vow/TGNFullDisplay\?find=&place=&nation=&english=Y&subjectid=.+(&ptype=PF)?/i"

Öne doğru eğik PHP ne RegEx'in ya özel değildir ve bu nedenle kaçtı olması gerekmez, ve kimliği farklı uzunlukta olabilir.