Ich muss Textdatei ändern Variablen Typen durch Voranstellen sie mit angegebenen Namespace. Aber ich muss Basistypen wie array
oder string
überspringen.preg_replace für eine Vorlage, die den angegebenen Satz von Wörtern ausschließt
So der Text
/**
* @param ParamType $param
* @return ReturnType
*/
public function SomeFunction(ParamType $param) {
...
}
/**
* @param array $param
* @return string
*/
public function OtherFunction($param) {
...
}
Sollte auf
/**
* @param \My\Namespace\ParamType $param
* @return \My\Namespace\ReturnType
*/
public function SomeFunction(\My\Namespace\ParamType $param) {
...
}
/**
* @param array $param
* @return string
*/
public function OtherFunction($param) {
...
}
Meine Transformation sieht nun umgewandelt werden, wie
$classFileText = preg_replace(
[
'/@param\s+([A-Za-z]+)\s+\$(\w+)/',
'/@return\s+([A-Za-z]+)/',
'/@var\s+([A-Za-z]+)/',
'/\s+function\s+([A-Za-z]+)\s*\(\s*([A-Za-z]+)\s+\$(\w+)/',
],
[
'@param \\' . $typesNamespace . '\\\\$1 $\\2 ',
'@return \\' . $typesNamespace . '\\\\$1',
'@var \\' . $typesNamespace . '\\\\$1',
' function $1(\\' . $typesNamespace . '\\\\$2 $\\3',
],
$classFileText
);
folgt Dies funktioniert, aber Basistypen sind als andere vorangestellt.
Ich habe versucht, dies mit dieser Spitze zu lösen: Regular expression to match a line that doesn't contain a word?
Und viele andere ... Aber ich schlug fehl.
p.s. Ich bin darüber gestoßen, die Transformation des WSDL-Schemas in eine Reihe von Klassen für den Zugriff auf den SOAP-Service
Also, wo ist das Problem mit '/ @ param \ s + ((?: Array |?! string | calleable) \ s) ([A-Za-z] +) \ s + \ $ (\ w +)/'(nach Bedarf ergänzen) ... Wie die andere Frage zeigt? – bwoebi
@bwoebi ich weiß es nicht, aber das funktioniert nicht ... versucht, dieses Muster zu verwenden, funktioniert es gut in refiddle: http://refiddles.com/refiddles/579e914475622d2391020000 aber in meinem Code funktioniert es nicht, "Array "und" String "immer noch – oakymax
@bwoebi behoben, funktioniert jetzt. sieht aus, als wäre ein Tippfehler in meinem Code ... vielen Dank!)) – oakymax