W moim podświetlaczu składni używam wyrażenia regularnego do analizowania różnych terminów. Poniżej znajduje się jak parsuję klasy PHP:
foreach ( PHP::$Classes as $class )
$code = preg_replace( "/\b{$class}\b/", $this->_getHtmlCode( $class, PHP::$Colors['class'] ), $code );
Teraz po prostu zignoruj klasę PHP i funkcję _getHtmlCode. Wyrażenie regularne "/\b{$class}\b/"
pasuje do nazw takich jak count
. Jeśli tworzę zmienną o nazwie $count
, pasuje ona do tego dobrze.
Jak mogę znaleźć nazwy klas, które nie są poprzedzone $
?
3 odpowiedzi
Możesz użyć ujemnego spojrzenia wstecz o zerowej szerokości, aby wykonać to samo zadanie - zasadniczo, aby upewnić się, że nie ma znaku dolara przed tekstem: /(?<!\$){$class}/
.
(?<! # Non-capturing look-behind group, captures only if the following regex is NOT found before the text.
\$) # Escaped dollar sign
{$class} # Class name
Czy próbujesz dopasować className? tj. class className {}
lub $foo = new className
Jeśli tak, możesz sprawdzić co najmniej jedną spację przed nazwą klasy:
/[ ]+{$class}\b/
Ciekawe, że $ liczy się jako granica, czyż nie. W każdym razie, jedną poprawką jest umieszczenie tego po \b:
(?<!\$)
Zobacz http://www.php.net/manual/en/regexp. reference.assertions.php, co to oznacza
Oto skrypt testowy, który to demonstruje:
$list=array(
'class MyClass',
'class HisClass',
'var $MyClass',
);
foreach($list as $s){
echo $s."\n";
if(preg_match('/\bMyClass\b/',$s))echo "OK";else echo "Failed";
echo "\n";
if(preg_match('/\b(?<!\$)MyClass\b/',$s))echo "OK";else echo "Failed";
echo "\n";
}
Podobne pytania
Nowe pytania
php
PHP to szeroko stosowany, wysokopoziomowy, dynamiczny, zorientowany obiektowo i interpretowany język skryptowy przeznaczony głównie do tworzenia stron WWW po stronie serwera. Używane w przypadku pytań dotyczących języka PHP.