PHPのpreg_replaceの正規表現で「[]」が使えない - PHPプロ!Q&A掲示板

4839

  • 募集中!! 0P

PHPのpreg_replaceの正規表現で「[]」が使えない

質問日時 / 2017年4月27日 09:51    回答数 / 2件

Questioner:  cyber_penguin  このエントリーをはてなブックマークに追加 

キーワード / キーワードが設定されていません

CentOS7
PHP 5.6.30 (cli)

上記の環境において、preg_replaceの挙動で質問があります。
下記のように「[]」で括って、表現した場合、置換されないのですが、
正規表現が間違ってるのか、何か、他の所(環境等)で、チェックポイントがあるのか
ご指摘頂けますと幸いです。

よろしくお願いいたします。

【OK】空白に置換される
  1. $text ="ビタミンEの補給";
  2. $text = preg_replace('/ビタミンEの補給/', '', $text);

【OK】空白に置換されない(パターンのEが半角なので)
  1. $text ="ビタミンEの補給";
  2. $text = preg_replace('/ビタミンEの補給/', '', $text);

【NG】空白に置換されない
  1. $text ="ビタミンEの補給";
  2. $text = preg_replace('/ビタミン[A-Z]の補給/', '', $text);


ツリー一覧

┗A01shimixパターン修飾子の u(PCRE_UTF8)が必要だと思います
 ┗A01-1cyber_penguinありがとうございます! 「u (PCRE_UTF8)」を理解

回答一覧

並び替え:

A01 満足
answerershimix [4月27日 11:38]

パターン修飾子の u(PCRE_UTF8)が必要だと思いますけどねぇ・・。

http://php.net/manual/ja/reference.pcre.pattern.modifiers.php

私の環境では下記でちゃんと置換出来ました。

$text =  preg_replace('/ビタミン[A-Z]の補給/u', '', $text);




(蛇足)
個人的にはシングルバイト文字でもマルチバイト文字でも置換するのが楽かなとは思います(Unicode文字プロパティが使えるし)。

$text =  preg_replace('/ビタミン\p{Lu}の補給/u', '', $text);

もしくは(Upper/Lowerも不問にして)

$text =  preg_replace('/ビタミン\p{L}の補給/u', '', $text);

この意見に回答する

ツリーへ TOPへ

A01-1
replyercyber_penguin [4月27日 12:25]

ありがとうございます!

「u (PCRE_UTF8)」を理解しておりませんでした。
仰る通り、「u」で意図する結果となりました。

また、曖昧さを吸収する方法も大変参考になりました。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
ログファイルの中の空のデータ行を削除したい
 このエントリーをはてなブックマークに追加 
A
ログのデータ個数(列数)が固定で、空のログが"<><><>"だと既知であれば if ($line === "<><><>") { continue; } で読み飛ばしてもいいのでは? ...

>>続きを読む

まずは配列や文字列の扱いから、じっくり勉強して行きましょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)