PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   PHP Developer Forum (https://www.php-resource.de/forum/php-developer-forum/)
-   -   Problem mit Teilstring aus RegEx (https://www.php-resource.de/forum/php-developer-forum/78503-problem-mit-teilstring-aus-regex.html)

Captain Future 26-11-2006 18:32

Problem mit Teilstring aus RegEx
 
Hi Leute,

habe da ein Problem mit nem Teilstring aus nem RegEx.
Ich will aus einem Regulären Ausdruck den 7 Teil nehmen und ihn in meine Funktion packen um dort zu checken ob der Wert kleiner 50 ist und dann je nach Fall den String wieder zurückgebe oder verändert zurückgebe (z.B. min. 55).

PHP-Code:

$suchmuster20 '/(position:)([^\{]*)(absolute)([^\}]*)(top:)([\s]*)([\d]{1,2})(px)/s';

$pimpfeld_string preg_replace($suchmuster20top_check('$1''$2''$3''$4''$5''$6''$7''$8''$0'), $pimpfeld_string);
} else
    {
    echo 
"Nichts machen!!!"
    }

echo 
$pimpfeld_string;

///////////////////////////////////////////////////////////////////////////////////////////////
function top_check($sm_part1$sm_part2$sm_part3$sm_part4$sm_part5$sm_part6$sm_zahl$sm_einheit$sm_komplett)
{
    
    
//echo $sm_zahl;
    //$sm_zahl = intval($sm_zahl);
    
if($sm_zahl 50)
    {
    
$fixed_style '<50:::'.$sm_zahl.':::'.$sm_part1 .$sm_part2 .$sm_part3 .$sm_part4 .'top:55px';
    }
    else
     {
     
$fixed_style '>50:::'.$sm_komplett;
     }
return 
$fixed_style;


Nu kann aber die Überprüfung ob der $7 Wert kleiner 50 ist nicht richtig erfolgen weil das ja ein string ist.
Wenn da also 30 drin steht und ich dann mit

PHP-Code:

$sm_zahl intval($sm_zahl); 

rangehe und das ganze mit dem return zurück kommt wird bei der Ausgabe nur 0 angezeigt.

Wo klemmt es da nur ?

Wäre toll wenn jemand von euch ne Idee hätte.

Danke vorab.

Ciao CF

fiderallalla 27-11-2006 01:13

Hi,

intval gibt 0 zurück u. A. wenn seine Typenumwandlung erfolglos war.
Ich persönlich verwende gerne $string+=0;

Ich habe gerade nichts zum testen hier und muss aus dem Gedächtnis kramen, aber wenn Du an 7. Stelle eine Zahl suchst stimmt IMHO Dein Pattern nicht, da müsste [\d]{1,2} stehen wenn Du eine zweistellige zahl suchst. Momentan suchst Du nach 1 oder 2 "d", da das "d" in einer Zeichenklasse definiert ist.
Außerdem ist das 7. Ergebnis Match $6, da bei $0 angefangen wird zu zählen. Somit übergibst Du deiner Funktion 9 Argumente, obwohl Dein Pattern nur 8 auffängt.

Gruß,

Hans

Captain Future 27-11-2006 11:41

Hi Hans,

danke für die Antwort.
Da ist irgendwie beim Text einfügen das ([\d]{1,2}) verändert worden - steht bei mir im Code schon mit \d da.
Was deine Aussage mit $1 und $0 angeht, muss ich dir leider wiedersprechen.
$1 ist der erste (Teil ) des RegEx.
$0 ist der ganze RegEx, also $1.....$n

Die Reihenfolge kanns nicht sein, denn $7 ist in der function ja $sm_zahl und die wird bei nach übergabe aus der Funktion korrekt ausgegeben. Nur in der Funktion kommt da nur 0 an oder $7 ist doch komisch.

Wo liegt da bloss der Hund begraben ?
Kann doch nicht viel sein.

@Hans: Schonmal thanx

Ciao CF

fiderallalla 27-11-2006 15:32

Zitat:

Was deine Aussage mit $1 und $0 angeht, muss ich dir leider wiedersprechen.
Ja, Du hast vollkommen recht - sorry!!! :dontknow:

Möglicherweise wird das Callback nicht korrekt angesprochen, versuch doch mal als 2. Argument (man beachte die ->")
"topcheck($1,$2,$3, usw... )"

HTH,

Hans

Captain Future 27-11-2006 19:18

Hab das mal so umgebaut dann lief es auf dem localhost, aber auf dem Server wo es hin soll plötzlich wieder diese Fehlermeldung:

Warning: preg_replace_callback() [function.preg-replace-callback]: requires argument 2, 'top_check', to be a valid callback in...

PHP-Code:

if(stristr($pimpfeld_string'position') && stristr($pimpfeld_string'absolute') && stristr($pimpfeld_string'top'))
{
$suchmuster20 '/(position:)([^\{]*)(absolute)([^\}]*)(top:)([^0-9]*)([\d]{1,2})(px)/si';
$pimpfeld_string preg_replace_callback($suchmuster20'top_check'$pimpfeld_string);
}
///////////////////////////////////////////////////////////////////////////////////////////////
function top_check($match)
{
    
$sm_zahl $match[7];
    
$sm_zahl intval($sm_zahl);
    if(
$sm_zahl 50)
    {
    
$fixed_style '<50:::'.$sm_zahl.':::'.$match[1] .$match[2].$match[3].$match[4].'top:55px';
    }
    else
     {
    
$fixed_style '>50:::'.$sm_zahl.':::'.$match[1] .$match[2].$match[3].$match[4].$match[5].$match[7].'px';
     }
return 
$fixed_style;


Kannst mal bitte die genauen Syntax für meinen Anwendungsfall schreiben ?

Die Beispiele auf php.net zur preg_replace_callback sind ja total wustig und haben durch die Bank böse Syntax-Fehler :-(

Vielleicht hab ihr das ja schon gemacht mit der preg_replace_callback und so nem Anwendungsfall.

Besten Dank vorab für Hilfe.

Ciao CF

fiderallalla 27-11-2006 21:37

nee, ich meinte:
PHP-Code:

$pimpfeld_string preg_replace($suchmuster20"topcheck($1,$2,$3,$4,$5,$6,$7,$8)"$pimpfeld_string); 

den $0 lass mal weg

Captain Future 28-11-2006 12:37

Ne also da is ja nen Sytnax Fehler. So geht das leider net. Und warum preg_replace brauche doch nen callback.

Ich habs so:

PHP-Code:

$pimpfeld_string preg_replace_callback($suchmuster20'top_check'$pimpfeld_string); 

auf meinem localhost mit PHP 5.1.6-5 zum laufen gebracht, aber auf dem Server wo es hin soll mit PHP 5.1.6 kommt folgende Fehlermeldung:

Warning: preg_replace_callback() [function.preg-replace-callback]: requires argument 2, 'top_check', to be a valid callback in /.../www/htdocs/...index.php on line 750
750 ist die Codestelle die hier in diesem Beitrag steht.

Ist doch komisch, woran kann das liegen ?

Ciao CF

fiderallalla 28-11-2006 13:02

1) stimmt der Name der Funktion die Du aufrufen willst _genau_ mit dem Namen des Callbacks überein?

2) Hast Du meine Codezeile ausprobiert?

3DMax 28-11-2006 13:05

Zitat:

Original geschrieben von Captain Future
Ist doch komisch, woran kann das liegen ?
du kannst ja mal versuchen, die callback-funktion vor dem aufruf von preg_match_callback zu definieren.

Captain Future 28-11-2006 19:36

@fiderallalla:
Zu 1. ja
Zu 2. ja ist aber von der Syntax her nicht gegangen.
Aber erstmal Danke.

@3DMax
Zitat:

du kannst ja mal versuchen, die callback-funktion vor dem aufruf von preg_match_callback zu definieren.
Wie meinste das denn genau ?

@all
Habe folgendes festgestellt:
Unter PHP Version 5.1.6-5 kommt der Fehler
Unter PHP 5.1.6 läuft es und
unter PHP 5.2.0 läufts auch.

Kann dann ja eigentlich nur ein Bug sein oder ?

Habe im Netz auch über diverse Bugs der Funktion in Versionen vor 5.1.6 gelesen.

P.S.: Die Doku auf php.net zu preg_replace_callback ist ziemlich schlecht und die Beispiel oft voller Syntax-Fehler.

3DMax 29-11-2006 00:47

Zitat:

Original geschrieben von Captain Future
Wie meinste das denn genau ?
achso, preg_replace_callback meine ich natürlich.
ansonsten: function top_check($match){...} mal vor $pimpfeld_string = preg_replace_callback($suchmuster20, 'top_check', $pimpfeld_string); schreiben.
die reihenfolge sollte eigentlich egal sein, aber du hast ja den fehler, dass die funktion unbekannt ist.

und von welchen syntax-fehlern in der doku sprichst du?

Captain Future 29-11-2006 18:44

Hi Leute,

vielen Dank nochmal an Alle. :-)

Wie gesagt unter 5.1.6 und 5.2.0 läuft es, war wohl ein Bug von 5.1.6-5.

@3DMax
Die sind doch überall.
Da brauchst Du dir nur mal 2 oder 3 Funktionen raussuchen und die Beispiele dazu durchgehen die da gepostet sind. Das meiste ist mit Fehlern gesähnt. Naja kann halt nur besser werden.
Aber sonst ist php.net ne gute Seite :-)

Ciao CF


Alle Zeitangaben in WEZ +2. Es ist jetzt 02:26 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG