Algunos de los otros respondedores han sugerido el uso de una expresión regular que no depende de lookbehinds, pero 1 piensan que es necesario un ejemplo de trabajo completa para obtener el punto de ancho. La idea es que usted empareja la secuencia completa ("Investigación", además de la siguiente palabra) de la forma habitual, a continuación, utilizar un grupo de captura para aislar la parte que le interese. Por ejemplo,
String s = "Lorem ipsum dolor sit amet, consectetur " +
"adipiscing elit. Nunc eu tellus vel nunc pretium " +
"lacinia. Proin sed lorem. Cras sed ipsum. Nunc " +
"a libero quis risus sollicitudin imperdiet.";
Pattern p = Pattern.compile("ipsum\\W+(\\w+)");
Matcher m = p.matcher(s);
while (m.find())
{
System.out.println(m.group(1));
}
Tenga en cuenta que esta opción se imprime tanto "inteligente" y "ahora". Para hacer eso con la versión de búsqueda hacia atrás, que tendría que hacer algo como hacker:
Pattern p = Pattern.compile("(?<=ipsum\\W{1,2})(\\w+)");
Eso es Java, que requiere la búsqueda hacia atrás tienen una longitud máxima obvia. Algunos sabores no tienen ni siquiera eso flexibilidad, y por supuesto, algunos no soportan lookbehinds en absoluto.
Sin embargo, las personas de mayor problema parece estar teniendo en sus ejemplos no es con lookbehinds, pero con límites de las palabras. Tanto David Kemp y CK parecen esperar \b
para que coincida con el carácter de espacio después de la 'M', pero no es así; que coincide con la posición (o límite) entre la 'm' y el espacio.
Es un error común, uno 1've incluso visto repetido en algunos libros y tutoriales, pero la construcción de límite de palabra, \b
no coincide con cualquier carácter. Es una afirmación de anchura cero, como lookarounds y anclajes (^
, $
, \z
, etc.), y lo que coincide es una posición que está ya sea precedido por un carácter de palabra y no con uno, o seguido por un carácter de palabra y no ha sido precedida por una.
me ganó también :) – annakata
Lookbehinds tienden a ser bastante limitados cuando se trata de usar comodines. – cletus
Lookbehinds podría no ser necesario aquí. Dependiendo de lo que "quiero emparejar" en la pregunta se refiere a, vea la solución de David Kemp. – user55400