いくつかの文字が文字列内でバランスが取れているかどうかをチェックするためのperlスクリプトを書きたいです。それらがバランスが取れていない場合、それはそれらを削除します。たとえば、文字列に開き括弧のみが含まれている場合は、この文字を削除する必要があります。次のコードを使用しましたが、機能しません...
sub checkBalance{
my $text= $_[0];
### Check Balanced Quates
my $count = ($text =~ tr/"//);
if ( $count%2 !=0)
{
$text=~ s/"//g;
}
### Check Balanced «»
if (((($text =~ m#(.*».*)#) && !($text =~ m#(.*«.*)#)) || !(($text =~ m#(.*».*)#) && ($text =~ m#(.*«.*)#))) || (index($text, "«")>index($text, "»")))
{
$text=~ s/»//g;
$text=~ s/«//g;
}
return $text;
}
なぜそれが機能しないのですか?
plファイルはUTF8です。サンプル入力は次のとおりです。
می گوید: «یکی از اصول
期待される出力は次のとおりです。
می گوید: یکی از اصول
このコードを英語の文字列で使用しました。英語の文字列では機能するようですが、アラビア語やペルシア語などの他の言語では機能しないようです。