質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

3回答

1590閲覧

正規表現でヒットした部分だけ半角から全角にしたい

sakura_hana

総合スコア11427

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/06/06 14:34

A=123B=456
このような文字列を
「A=123」B=456
のような形に変換したいです。(上記は例です)

$str = preg_replace('/(A=\d{1,3})/', '「$1」', $str);
これで「A=123」B=456には出来ましたが、これを全角にするにはどうすればよいのでしょうか?
mb_convert_kanaを使えば全角にはなりますが、文字列内の全ての数字が全角になってしまいます。

文字列の条件は以下の通りとなります。
・「A=」が行頭に来るとは限らない。
・「A=」の後ろの数字は1〜3桁。半角か全角かは不定。
・「A=数字」の後ろは不定。(「B」であるかどうかは定かでない)
・元の文字列には半角数字も全角数字も含まれている可能性があり、「A=数字」以外の部分は元のままにする必要がある(半角/全角を変えてはいけない)。

preg_matchで取り出して、前後をカットして(3つの文字列にして)、ヒットした部分だけmb_convert_kanaをして、結合し直して1つの文字列にする……とすれば出来るのでしょうが、スマートではないのでもっと良い方法は無いかと質問させて頂きました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

文字クラスの中に全角文字入れるときはu修飾子をつけるのを忘れずに

u 修飾子を使用する目的

php

1$str = "A=123B=456"; 2$str = preg_replace_callback( 3 '/A=([\d0-9]{1,3})/u', 4 function ($m) { 5 return '「A=' . mb_convert_kana($x[1], 'N', 'UTF-8') . '」'; 6 }, 7 $str 8); 9var_dump($str);

投稿2017/06/06 19:41

mpyw

総合スコア5223

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

"A="を後読みして、

PHP

1$str = "A=134B456"; 2 3$str = preg_replace_callback('/A=\K[0-90-9]{1,3}/', 4 function($x){ return mb_convert_kana($x[0],'N'); }, 5 $str); 6 7var_dump($str);

あるいは、括弧を使って、

PHP

1$str = "A=134B456"; 2 3$str = preg_replace_callback('/A=([0-90-9]{1,3})/', 4 function($x){ return "A=".mb_convert_kana($x[1],'N'); }, 5 $str); 6 7var_dump($str);

#追記
ああ、A=の全体を「」で囲むんですね。じゃあ、括弧ですね。

PHP

1$str = "A=134B456"; 2 3$str = preg_replace_callback('/A=([0-90-9]{1,3})/', 4 function($x){ return '「A='.mb_convert_kana($x[1],'N').'」'; }, 5 $str); 6 7var_dump($str);

投稿2017/06/06 15:12

編集2017/06/06 15:16
otn

総合スコア84499

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

PHP

1$str="A=123B=456"; 2$pattern="/A=\d{1,3}/"; 3$replacement=function($x){return mb_convert_kana($x[0],"N");}; 4print preg_replace_callback($pattern,$replacement,$str);

投稿2017/06/06 14:43

yambejp

総合スコア114775

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問