Probleme mit dem Regex

Unicate

Erfahrenes Mitglied
Was soll er tun:
Er soll einen MySQL - Query überprüfen und mir sagen, ob er ein Ergebniss zurueck liefert oder nicht.
ein "INSERT" soll z.B. keines zurück liefern sondern eigentlich nur ein "SELECT"
Wenn der Query keines der im Regex angegebenen Anfänge hat, dann soll er false zurückgeben

Er macht aber nichts von dem...

PHP:
function CheckQuery($query)
{
	if(preg_match("/^(SELECT|INSERT INTO|UPDATE|DELETE)*/is", $query, $which))
	{
		$which = trim(strtoupper($which[0]));
		switch($which)
		{
			case 'SELECT':
				return 1;
				break;
			case 'INSERT INTO':
				return 2;
				break;
			case 'UPDATE':
				return 2;
				break;
			case 'DELETE':
				return 2;
				break;
			default:
				return false;
		}
	}
	else
	{
		/* Unguelitger Query */
		return false;
	}
}
 
Probier mal folgende Funktion:
PHP:
function CheckQuery( $query )
{
	if( preg_match('/^(?:SELECT|INSERT INTO|UPDATE|DELETE)/is', trim($query), $match) ) {
		switch( strtoupper($match[0]) ) {
			case 'SELECT':
				return 1;
				break;
			case 'INSERT INTO':
			case 'UPDATE':
			case 'DELETE':
				return 2;
				break;
		}
	}
	return false;
}
 
Die Schlüsselsequenz ?: sorgt dafür, dass der Inhalt der Klammern zwar gruppiert wird, von ihm aber aber kein so genannter Subpattern erzeugt wird und damit auch nicht referenzierbar ist.
 
Zurück