In fact is the same expression but with the words switched. I don't remember why I made separate but in the program where I use it works correctly. There's some reason but I'm not sure. Suddenly today the program starts to freezes and I found was because the second expression. The example that mades perl could not exit the evaluation of second regexp is:$content =~ /\b($par1)(\W+(?:\w+\W+){1,$distance})?($par2)\b/i $content =~ /\b($par2)(\W+(?:\w+\W+){1,$distance})?($par1)\b/i
And the text was the followingThe words where "abbott" and "salud" and the maximum distance was 20.
In fact the first expression makes a match but when the program process the second expression the program freeze. In fact, in the intention to process accents the exacts words that compare are:La mitad de las personas con VIH requiere de una atención psicológica + y emocional derivada del impacto del diagnóstico o de las consecuen +cias de la propia infección, una cifra que dobla a la de la població +n general, según las conclusiones de las IV Jornadas de Divulgación +sobre VIH que han reunido a unos doscientos profesionales, pacientes + y estudiantes en el hospital Reina Sofía de Murcia. En el congreso +, organizado por Amuvih en colaboración con el servicio de Proyecció +n Social y Voluntariado de la Universidad de Murcia y Abbott, ha det +erminado que las personas que viven con VIH demandan especialmente a +tención a su salud mental para mejorar su calidad de vida, "una asig +natura pendiente a pesar de los innumerables avances farmacológicos" +. Entre otros factores, las jornadas establecieron que en la situación +de "vulnerabilidad" de las personas con VIH influyen "el propio diag +nóstico, la comunicación de su situación a los allegados, el inicio +del tratamiento, las fluctuaciones a lo largo de la infección, la pé +rdida de salud y deterioro físico, así como los efectos adversos del + tratamiento". Igualmente, otros factores importantes son la pérdida de la motivació +n, el hastío, el estigma y rechazo, así como las nuevas parejas sexu +ales, los cambios familiares, laborales y sociales, entre otras cosa +s, que derivan en "riesgo de depresión mayor, trastorno distímico, t +rastorno por ansiedad generalizada o trastorno de pánico".
Note: To detect the correct number of words are between this two words I have to change the locale$par1 = [a\xe0\xe1\xe4\xe2A\xc1\xc0\xc4\xc2]bb[o\xf2\xf3\xf6\xf4O\xd3\ +xd2\xd6\xd4]tt; $par2 = s[a\xe0\xe1\xe4\xe2A\xc1\xc0\xc4\xc2]l[u\xf9\xfa\xfc\xfbU\xda\ +xd9\xdc\xdb]d;
Anybody think of any reason that could happen when in other cases the expression works correctly? You think the expression is wrong, or could be more simple? The code process the regular expression and if matchs after the content is highlighted. This the exact codeuse POSIX qw(locale_h); my $old_locale = setlocale(LC_CTYPE); setlocale(LC_CTYPE, 'ca_ES.iso885915@euro'); use locale;
I have no idea how to resolve it, finally I have to disable this process temporally to highlight it because of freezing effect.my $new_content = $content; if ($content =~ /\b($par1)(\W+(?:\w+\W+){1,$distance})?($par2) +\b/i){ my ($res1, $res2, $res3) = ($1, $2, $3); $new_content =~ s/$res1\Q$res2\E$res3/<$tag$class> $res1<\ +/$tag>$res2<$tag$class> $res3<\/$tag>/i; } if ($content =~ /\b($par2)(\W+(?:\w+\W+){1,$distance})?($par1) +\b/i){ my ($res1, $res2, $res3) = ($1, $2, $3); $new_content =~ s/$res1\Q$res2\E$res3/<$tag$class> $res1<\ +/$tag>$res2<$tag$class> $res3<\/$tag>/i; }
In reply to Problems searching and highlighting proximity words in a text by jrc
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |