[PHP] Zoeken in string tussen "X" en "Y"

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik wil uit een bepaalde string bepaalde waarden halen door te zoeken tussen constructies die altijd hetzelfde zijn. Ik heb op PHP.net een voorbeeldscript gevonden en dit een heel klein beetje aangepast om aan mijn situatie te voldoen, maar het werkt niet... Ik krijg gewoon geen output, zelfs geen foutmelding:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?
// Remove for actual version
$input = "<ElTank> Silver Nariyid Boots, (6) craft (Silver), AL 350 (6Tinks) : Major Coordination, Impenetrability VI, Minor Focus, Bludgeon Bane VI. Dif 286, [1.3/1.0/1.0/1.1/0.4/0.6/0.4], Value 6,161, 400BU";

function ExtractFromString($str, $start, $end) {
$str_low = strtolower($str);
   $pos_start = strpos($str_low, $start);
   $pos_end = strpos($str_low, $end, ($pos_start + strlen($start)));
   if ( ($pos_start !== false) && ($pos_end !== false) )
   {
       $pos1 = $pos_start + strlen($start);
       $pos2 = $pos_end - $pos1;
       return substr($str, $pos1, $pos2);
   }
}

$armor_name = ExtractFromString($input, "<ElTank>", ",");
echo $armor_name;

$armor_level = ExtractFromString($input, ", AL ", " (" );
echo $armor_level;
?>


Het moet bijvoorbeeld dus zoeken VAN "<ElTank>" TOT "," of VAN ", AL " TOT " ("

Is er iets mis met de code of is het gewoon onmogelijk speciale tekens als "<" of "," te gebruiken om tussen toe zoeken?

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ooit gehoord van regular expressions?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
-NMe- schreef op dinsdag 19 juli 2005 @ 22:17:
Ooit gehoord van regular expressions?
Je zult iets meer uitleg moeten geven, ik begin pas met PHP... Regular expressions zijn toch enkel voor het controleren van een contstructie, niet om de waarde tussen twee bepaalde constructies te zoeken?

Ik heb wel gelezen dat bij het gebruiken van speciale tekens best geen " tekens, maar wel ' tekens aangewend worden, en dat haakjes ge-escaped moeten worden (als dat ook hier van toepassing is?)

Dan zou het worden:

PHP:
1
2
3
4
5
$armor_name = ExtractFromString($input, '<ElTank>', ',');
echo $armor_name;

$armor_level = ExtractFromString($input, ', AL ', ' \(' );
echo $armor_level;


Helaas ook geen output...

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op dinsdag 19 juli 2005 @ 22:14:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<?
// Remove for actual version
$input = "<ElTank> Silver Nariyid Boots, (6) craft (Silver), AL 350 (6Tinks) : Major Coordination, Impenetrability VI, Minor Focus, Bludgeon Bane VI. Dif 286, [1.3/1.0/1.0/1.1/0.4/0.6/0.4], Value 6,161, 400BU";

...

$armor_name = ExtractFromString($input, "<ElTank>", ",");
echo $armor_name;

$armor_level = ExtractFromString($input, ", AL ", " (" );
echo $armor_level;
?>


Het moet bijvoorbeeld dus zoeken VAN "<ElTank>" TOT "," of VAN ", AL " TOT " ("
Een mogelijkheid (ff kort door de bocht - pseudo):
code:
1
2
3
4
5
$arr = split($input,',');
$armor_name = trim(replace($arr[0],'<ElTank>',''));

$arr2 = split($arr[2],' ');
$armor_level = $arr2[1];

[ Voor 27% gewijzigd door Verwijderd op 19-07-2005 23:35 . Reden: [code]-tags ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

In dit geval moet er niets ge-escaped worden. Over regular expressions zou ik je een uitleg kunnen geven, maar dan zou ik dubbel werk gaan doen. Er staat al een vrij complete uitleg in onze FAQ: P&W FAQ - Regular expressions . Daar staat ook een aantal links in naar meer uitleg. :)

En jawel, in dit geval zijn regexps prima toe te passen. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
je zet je input string om naar lowercase terwijl je start string uppercase characters bevat dus vandaar dat het niet werkt.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
lol, inderdaad, dat ik daar niet aan dacht... even zien of het wel werkt met lowercase. Bedankt in ieder geval, toch minstens een stap dichter nu :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het werkt, vriendelijk bedankt stekkel!
Pagina: 1