“How to avoid” expresii regulate (cateodata)

Se poate lua un simplu copy/paste.

Ideea principala este ca expresiile regulate ar trebui evitate pe cat posibil, datorita resurelor insemnate pe care le ocupa. In ciuda faptului ca PHP este un procesator de texte (la baza constructiei lui) se pare ca unele functii, desi par ca sunt simple manipulari de texte… nu sunt.

Atentie! Codul de mai jos trebuie adaptat.

<?php

$string = 'ATI will be here. Also search 1/2 here but don't search
1/2inside word. I have some AS-SSUS and a ATI slot and another 1/2 AS-SSUS express';

# vrei sa cauti ATI, de exemplu, si AS-SSUS
$arraySearch = array('AS-SSUS', 'ATI', '1/2');

arsort($arraySearch);
# pentru a se face cautarea in ordine

# ca sa ai cautare dupa cuvinte, scoti toata punctuatia
# mai corect ar fi sa iei toate ascci-urile din zona asta
$allPunctuation = str_split('!@#$%^&*()_-+=[]{};:'"?/.>,<~`'."\n\r");

# dar nu scoti caractere pe care vrei tu sa le cauti,
# cum este "-" de la ATI ( atentie la & de la &$punc )
foreach($allPunctuation as &$punc) {
	if(in_array($punc, array('-', '/')))
		$punc = NULL;
}

# facem explode dupa spatiu la replace-ul punctuatiei cu spatiu
$stringInWords = explode(' ', str_replace($allPunctuation, ' ', $string));
# apoi facem un test
echo '<pre>'; print_r($stringInWords); echo '<pre>';

# fecem un foreach pe toate cuvintele
foreach($stringInWords as $search) {
	# excludem spatiile goale
	if(trim($search) != '') {
		# verificam - fara strpos (acum avem un array)
		$haveResult = in_array($search, $arraySearch);
		if($haveResult !== false) {
			$result[] = 'We have '.$search;
		}
	}
}

echo isset($result) ? implode('<br />', $result) : 'Nu am gasit nimic';

?>