Regex para eliminar todas las palabras que contienen números de una oración

Hice mi mejor esfuerzo para eliminar todas las palabras en una oración con números en ellas, ¡pero aún así no tuve éxito! E incluso probé la siguiente expresión regular:

$regex = '/(\\s+\\w{1,2}(?=\\W+))|(\\s+[a-zA-Z0-9_-]+\\d+)/'; $x=preg_replace($regex,"",$x); 

Estoy tratando de lograr lo siguiente:

Texto original con palabras que contienen números y cualquier carácter especial como – y _:

 This is S3F8G m7j34m h98H40D-3D39 90843-432423 LSDF3 4X4it very good 343c3. 

El texto final debe ser el siguiente:

 This is very good. 

Bueno, escribí en Javascript:

 var str = 'This is S3F8G m7j34m h98H40D-3D39 90843-432423 LSDF3 4X4it very good 343c3.'; var result = str.match(/(^[\D]+\s|\s[\D]+\s|\s[\D]+$|^[\D]+$)+/g).join(''); 

Pero puedes probar esto en PHP:

  
  

devoluciones:

 This is very good. 

Una condición: dado que esta expresión regular elimina un espacio inicial en lugar de uno posterior, si la PRIMERA palabra contiene adigit, entonces el resultado tendrá un espacio antes de la finalización. Así:

  

devoluciones:

  foo bar ^ 

Y aquí está (con suerte) una manera libre de capricho ( ideone ):

 $str = '-12x This is S3F8G m7j34m h98H40D-3D39 90843-432423 LSDF3 4X4it very good 343c3. foo bar'; echo preg_replace('/\s+[\w-]*\d[\w-]*|[\w-]*\d[\w-]*\s*/', '', $str); 

Salida:

 This is very good. foo bar 

Cualquier carácter especial que desee incluir como parte de las palabras que deberá agregar a las clases de caracteres.