¿Cómo elimino todo hasta la primera palabra con al menos 2 letras, pero incluyo los números que tocan el comienzo de las 2+ letras? El siguiente código actualmente elimina todo hasta la primera letra.

$test = "1234 123423-34 b4 3-z a 234 This is a test";
echo preg_replace('/^[^A-Za-z]+/', '', $test);

Debería salir: Esta es una prueba

$test = "1234 123423-34 b4 3-z a 234This is a test";
echo preg_replace('/^[^A-Za-z]+/', '', $test);

Debería salir: 234 Esta es una prueba

0
heyitsmyusername 19 mar. 2017 a las 18:51

2 respuestas

La mejor respuesta

Puedes usar este patrón:

/^.*?(?=\d*[a-z]\d*[a-z]|$)/i
# ^  ^------ lookahead: followed by a "word" with 2 letters or the end of the string 
# '--------- any character + non-greedy quantifier: all characters until

Demo

La misma en unicode:

/.*?(?=\d*\pL\d*\pL|$)/Au

Demo

3
Casimir et Hippolyte 19 mar. 2017 a las 16:10

Otro con límites de palabras:

^.*?(?=\b\d*(?i)[a-z]{2,}\b)

Consulte una demostración en regex101.com .

0
Jan 19 mar. 2017 a las 16:15