Ben PHP PCRE'nin ile metin dizeleri bir dizi maç için çalışıyorum ve sorun arasındaki tüm maçları alıyorum yaşıyorum birinci ve ikinci.
Ben bunu yapmak isterim neden yeryüzünde herkes merak ediyor, bunun nedeni Doc Yapılan Yorumlar bulunuyor. Oh, nasıl Zend PHP dosyasından Doc Yorumlar okumak için yerli / eklenti işlevleri yapmak isterdim ...
Aşağıdaki örnek, (düz) metin bu sorun için kullanılacaktır. Her zaman dosyanın başında sadece bir açılış etiketi, hiçbir kapanış ile, saf PHP kodu olacaktır. Sen sözdizimi her zaman doğru olacağını varsayabiliriz.
<?php
class someClass extends someExample
{
function doSomething($someArg = 'someValue')
{
// Nested code blocks...
if($boolTest){}
}
private function killFurbies(){}
protected function runSomething(){}
}
abstract
class anotherClass
{
public function __construct(){}
abstract function saveTheWhales();
}
function globalFunc(){}
Problem
Bir sınıftaki tüm yöntemleri maç çalışıyor; Benim RegEx hiç killFurbies()
yöntemi bulmak değil. Açgözlü olmak icar sadece bir sınıfta son yöntemi maçları ve tembel olmak icar sadece ilk yöntem eşleşir anlamındadır.
$part = '.*'; // Greedy
$part = '.*?'; // Lazy
$regex = '%class(?:\\n|\\r|\\s)+([a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*)'
. '.*?\{' . $part .'(?:(public|protected|private)(?:\\n|\\r|\\s)+)?'
. 'function(?:\\n|\\r|\\s)+([a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff'
. ']*)(?:\\n|\\r|\\s)*\\(%ms';
preg_match_all($regex, file_get_contents(__EXAMPLE__), $matches, PREG_SET_ORDER);
var_dump($matches);
Sonuçlar:
// Lazy:
array(2) {
[0]=>
array(4) {
[0]=>
// Omitted.
[1]=>
string(9) "someClass"
[2]=>
string(0) ""
[3]=>
string(11) "doSomething"
}
[1]=>
array(4) {
[0]=>
// Omitted.
[1]=>
string(12) "anotherClass"
[2]=>
string(6) "public"
[3]=>
string(11) "__construct"
}
}
// Greedy:
array(2) {
[0]=>
array(4) {
[0]=>
// Omitted.
[1]=>
string(9) "someClass"
[2]=>
string(0) ""
[3]=>
string(13) "saveTheWhales"
}
[1]=>
array(4) {
[0]=>
// Omitted.
[1]=>
string(12) "anotherClass"
[2]=>
string(0) ""
[3]=>
string(13) "saveTheWhales"
}
}
Ben nasıl tüm maç? : S
Zaten ben bunu yazarak kulüpler olarak bu soru saçma olduğunu hissediyorum gibi herhangi bir yardım minnetle, duyacağız. Böyle bir soruyu cevaplamak için çalışırken herkes benden daha cesur olduğunu!
Teşekkürler, mniz.