Perl regex karakter setleri birden örnekleri üzerinde boğulma

0 Cevap php

Ben php preg_replace kullanarak bazı çılgın hataları ile başladı ve "i" ve birlikte "ı" diyor olduğunu türkçe noktalı kullanarak birden fazla karakter sınıf olan problem durumunda aşağı haşlanmış. İşte php basit bir test durum:

<?php
    echo 'match single normal i: ';
    $str = 'mi';
    echo (preg_match('!m[ıi]!', $str)) ? "ok\n" : "fail\n";

    echo 'match single undotted ı: ';
    $str = 'mı';
    echo (preg_match('!m[ıi]!', $str)) ? "ok\n" : "fail\n";

    echo 'match double normal i: ';
    $str = 'misir';
    echo (preg_match('!m[ıi]s[ıi]r!', $str)) ? "ok\n" : "fail\n";

    echo 'match double undotted ı: ';
    $str = 'mısır';
    echo (preg_match('!m[ıi]s[ıi]r!', $str)) ? "ok\n" : "fail\n";
?>

Ve yine perl'de aynı test case:

#!/usr/bin/perl

$str = 'mi';
$str =~ m/m[ıi]/ && print "match single normal i\n";

$str = 'mı';
$str =~ m/m[ıi]/ && print "match single undotted ı\n";

$str = 'misir';
$str =~ m/m[ıi]s[ıi]r/ && print "match double normal i\n";

$str = 'mısır';
$str =~ m/m[ıi]s[ıi]r/ && print "match double undotted ı\n";

İlk üç testler iyi çalışır. Son uyuşmuyor.

Neden bu aynı ifadede bir kez değil, ikinci kez bir karakter sınıfı olarak ince çalışır? Nasıl olursa olsun ile yazılmış mektupları ne kombinasyonları maç ihtiyacı böyle bir kelime için maç bir ifade yazabilirim?

the language problem ben programlamak için çalışıyorum üzerine Edit: Arkaplan.

Edit 2: bir use utf8; direktifini ekleme perl sürümünü düzeltmek yok. Benim orijinal sorun php programı ile oldu ve ben sadece php bir hata olup olmadığını görmek için Perl geçiş beri, bu bana bir sürü yardımcı olmuyor. Does anybody know the directive to make PHP not choke on this?

0 Cevap