ページ 11

大文字小文字を区別する正規表現について

Posted: 2015年10月16日(金) 10:51
by C PHP
1つ目は以下のっような文字列をすべて「; ja-JP」に置換したいと思っています。

; en-US
; en-GB
; pt-BR
; es-ES
; de-DE



2つ目は以下のっような文字列をすべて「; ja-jp」に置換したいと思っています。

; zh-sg
; zh-tw
; pt-br
; es-es
; de-de



このようにしても、エラーになってしまいました。
; [a_z][a_z]-[a_z][a_z]

いずれも、セミコロン、半角スペース、アルファベット2文字、ハイフン、アルファベット2文字、という文字列で、大文字か小文字かが違います。

エディタはサクラエディタをたまに使っています。

正規表現はほとんどわからないのですが、どのようにすればよいでしょうか?

よろしくおねがいします。

Re: 大文字小文字を区別する正規表現について

Posted: 2015年10月16日(金) 17:29
by YuO
C PHP さんが書きました:このようにしても、エラーになってしまいました。
; [a_z][a_z]-[a_z][a_z]
エラーになる,というのは何の情報も提供していません。
  • 利用している正規表現エンジン (or 言語,アプリケーション,etc.)
  • 実際に出てきたエラーメッセージ
を書いてください。

とりあえず,範囲指定がしたいのであれば,_ではなく-だとは思いますが。

Re: 大文字小文字を区別する正規表現について

Posted: 2015年10月17日(土) 01:59
by かずま
C PHP さんが書きました:このようにしても、エラーになってしまいました。
; [a_z][a_z]-[a_z][a_z]
; [a-z][a-z]-[a-z][a-z] としてみたらどうなりますか?
下線ではなく、ハイフンです。

Re: 大文字小文字を区別する正規表現について

Posted: 2015年10月17日(土) 08:50
by box
大文字にも対応する必要があるので、
[a-z][a-z]-[a-zA-Z]-[a-zA-Z]
なんていうのが登場する場面があるかもしれません。

Re: 大文字小文字を区別する正規表現について

Posted: 2015年10月17日(土) 08:53
by みけCAT
「以下のっような文字列」の定義がよくわからないですが、例えば

コード:

<?php

$str1 = <<<EOS
; en-US
; en-GB
; pt-BR
; es-ES
; de-DE
EOS;

$str2 = <<<EOS
; zh-sg
; zh-tw
; pt-br
; es-es
; de-de
EOS;

echo "----- str1 result -----\n";
echo preg_replace("/; [a-z]{2}-[A-Z]{2}/", "; ja-JP", $str1);
echo "\n----- str2 result -----\n";
echo preg_replace("/; [a-z]{2}-[a-z]{2}/", "; ja-jp", $str2);
もしくは、一度で置換するなら、例えば

コード:

<?php

$str = <<<EOS
; en-US
; en-GB
; pt-BR
; es-ES
; de-DE
; zh-sg
; zh-tw
; pt-br
; es-es
; de-de
EOS;

echo preg_replace_callback("/; [a-z]{2}-([A-Z]{2}|[a-z]{2})/",
    function($matches) {
        return "; ja-" . (ctype_upper($matches[1]) ? "JP" : "jp");
    }, $str);

Re: 大文字小文字を区別する正規表現について

Posted: 2015年10月20日(火) 07:58
by C PHP
ありがとうございました。

解決することができました。