Bonjour,
J'apprends actuellement le russe.
Je chercher à créer une expression régulière pour repérer les mots dans un texte qu'ils soient accentués ou non. Je cherche uniquement les mots entiers (en utf8).
Le russe ne possède pas de lettres accentuées, mais lorsqu'on apprend le russe, les textes peuvent posséder des accents aigus sur les voyelles pour aider à prononcer les mots correctement.
Voici les fonctions que j'ai écrites:
function regExpWordWithOrWithoutStress($word){
$without_accent = array("а","э","ы","у","о","я","е","ю","и");
$with_accent = array(
"(а|а\p{M})",
"(э|э\p{M})",
"(ы|ы\p{M})",
"(у|у\p{M})",
"(о|о\p{M})",
"(я|я\p{M})",
"(е|ё|е\p{M})",
"(ю|ю\p{M})",
"(и|и\p{M})");
$word_ready = str_replace($without_accent, $with_accent, $word);
return $word_ready;
}
function regExpFindWord($word){
$search = regExpWordWithOrWithoutStress($word);
$regExp = "/(?<!\pL)".$search."(?!\pL)/ui";
return $regExp;
}
Note: Je n'utilise pas les balises de code pour que les caractères russes puissent s'afficher correctement dans le code.
Mon problème est le suivant:
Lorsque je cherche le mot и un petit mot russe qui signifie "et" dans le texte
И вот прихожу́ я в э́тот моме́нт в министе́рство, а за столо́м сиди́т не бу́дем говори́ть кто, и вычёркивает из уче́бника и́мя Алекса́ндра Меня́.
avec l'expression régulière
(?<!\pL)(и|и\p{M})(?!\pL)
les deux premiers и sont bien reconnus, mais le и de и́мя est aussi sélectionné alors que je ne cherche que les mots entiers...
Comment modifier l'expression régulière pour que seuls les deux premiers и soient bien pris en compte?
Partager