Esta función lo que hace es buscar un caracter en una cadena.
Esto es incorrecto.
Del enlace:
Descripción
int preg_match (...)
Busca en subject una coincidencia con la expresión regular dada en pattern.
Quizá he sido demasiado formal y no me he sabido hacer entender. Creo que es obvio que la función no busca un caracter porque estamos buscando cadenas enteras. Pero tampoco busca cadenas tal cual se las pasamos. IE7 no devuelve (MSIE 7\.[0-9]+) en la cabecera. Devolverá algo como MSIE 7.01232141.
$pattern es una expresión regular. Los paréntesis se usan para agrupar y en este caso se pueden descartar. La parte hasta el 7 tiene que coincidir exactamente. El punto es un carácter especial en las expresiones regulares (significa que se aceptará cualquier carácter), así que para decir que lo que esperamos es un punto, hay que meter la barra invertida. [0-9] indica que se aceptará un único caracter entre 0 y 9. Se pueden usar otros conjuntos como [d-k], [adgkq35] o, uno muy común, [a-zA-Z0-9]. Y por último el + indica que el último carácter debe aparecer por lo menos una vez.
Se dice que una expresión regular r genera la cadena s si a partir de r se puede llegar a obtener s.
Por ejemplo, [ab]+ genera las cadenas a, b, aa, ab, ba, bb, aaa... Partiendo de esta definición, tampoco es correcto lo que yo dije. Realmente, comprueba si $pattern puede generar alguna subcadena de $user_agent. Pero esto ya es casi semántica.
Una expresión regular que no contenga caracteres especiales (por ejemplo: "MSIE") se genera únicamente a sí misma, y por tanto se puede usar preg_match para buscar subcadenas. Quise matizar que este no es el principal objetivo de la función porque el código original usaba expresiones regulares.
En fin, todo esto es muy teórico, está muy relacionado con la parte más básica de la teoría de autómatas y lenguajes formales, que viene a unir las teorías lingüísticas de Noam Chomsky con la teoría de la computación, y es la base para entender la computabilidad (que estudia el límite teórico de potencia de un ordenador con velocidad infinita y memoria infinita) y la complejidad algorítmica (que estudia los límites prácticos en ordenadores reales). Fundamental, por ejemplo, para entender la criptografía moderna.
POSIBILIDAD A:
if(preg_match($pattern, $user_agent)) = Busca todos los valores posibles de $pattern (osea de '(y)') dentro del valor de $user_agent y si encuentra una coincidencia
Aquí lo habías explicado muy bien.