EisFuX: Mit preg_match(), oder man wendet das OR richtig an

Beitrag lesen

(Hallo|Hi(ho)|Tag) marie,

hi

es geht um folgende Funktion:
int strpos ( string $haystack, mixed $needle [, int $offset] )

$needle darf ja bekanntlich ein einzelnes zeichen oder auch eine zeichenkette sein.

Bsp:
$meinString = 'abcdef';
$findMich   = 'c';
$pos = strpos($meinString, $findMich);

jetzt mein proplem:
ich will im string 'abcdef' die Position des ersten 'c' ODER 'b'
also je nach dem welches zeichen zuerst kommt.

Versuchs mal mit preg_match():

  
// zwischen den eckigen Klammern sind beliebige Buchstaben ergänzbar  
$nadel = '/[bc]/';  
$gefunden = preg_match($nadel, $heuhaufen, $treffer, PREG_OFFSET_CAPTURE);  
if ($gefunden) {  
  $pos = $treffer[0][1];  
  ...  
}  
else {  
  ...  
}  

Bei Suchstrings (also "Nadeln"), die länger als ein Zeichen sind, muss $nadel allerdings etwas abgeändert werden:

  
$nadel = '/(nadel1|nadel2|nadel3)/';  

Hilfreich zum Verständnis von preg_match() und (seinen|ihren) Verwandten ist auf alle Fälle das Kapitel Reguläre Ausdrücke im PHP-Handbuch.
Empfehlenswert ist das Tutorial zum RegExp-Evaluator.
Aber auch Wikipedia und Google dürften am Anfang weiterhelfen können.

Mit 'OR' geht nicht:

Doch, das ginge auch ...

$pos = strpos(abcdef, 'a' OR 'b');

Aber so natürlich nicht. Eher so:

  
if (  
  ( strpos($heuhaufen, $nadel_a) !== FALSE ) OR  
  ( strpos($heuhaufen, $nadel_b) !== FALSE )  
) {  
  // gefunden  
  ...  
}  
else {  
  // nicht gefunden  
  ...  
}  

Ich denke aber, dass die Variante mit preg_match() für mehr als zwei Such-Zeichen(ketten) einfacher anzuwenden ist.

MffG
EisFuX