Coincidencia de caracteres específicos precedidos por un espacio o nada Regex

Siguiendo esto post Estoy intentando la misma tarea, sin embargo, la expresión regular que se proporciona a continuación me está dando resultados contradictorios:

$text = "Jiaaah.. RT @mizter_popo";

$pattern = "/(^|[ ])(\RT(?=\s))/";

if(preg_match($pattern, $text)) {
    echo "correct";
} else {
    echo "wrong";
}

Se espera que esto dé 'correcto'. Ejecutar esto en un script PHP en mi servidor local y aquí devuelve 'incorrecto'. Ejecutando la misma lógica aquí devuelve 'correcto'? ¿Alguien puede ayudar a explicar lo que está pasando? ¿O tal vez me equivoco al esperar que se repita 'correcto'?

preguntado el 04 de julio de 12 a las 05:07

3 Respuestas

Para mí, quitar el \ antes de RT funciona en ambos en esta instancia específica:

$pattern = "/(^|[ ])(RT(?=\s))/";

Es posible que el sitio de prueba de expresiones regulares esté realizando una limpieza profunda para asegurarse de que las personas no rompan su sitio, lo que puede sesgar lo que funciona y lo que no.

Respondido 04 Jul 12, 05:07

¡Perfecto! Debería haberme dado cuenta de que un probador en línea haría eso. ¡Gracias! - djderek

Encontré un patrón que usa una afirmación en lugar de mirar atrás. También hay alternancia, pero apuesto a que eso podría tenerse en cuenta en la afirmación con alguien un poco más talentoso en REGEX que yo...

$pattern = "/(^RT)|((?<=[ ])RT)/";

Respondido 04 Jul 12, 05:07

ah no lo había pensado desde esa perspectiva. Gracias - djderek

Este código funcionaría

if (preg_match('/(?<=^|\s)RT(?=\s)/', $subject)) {
    # Successful match
} else {
    # Match attempt failed
}

pero el sitio que mencionaste no admite esto de todos modos.

Respondido 04 Jul 12, 05:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.