文中のスペース削除方法を探しています。
単にスペースを削除するのではなく、スペースの前後が日本語である場合のみスペースを削除する場合にはどうすればよいでしょうか?
下に例を書きます:
「明日 日比谷公園 に 向かい ます ので、何卒 よろしくお願いいたします。」
↓↓↓↓
「明日日比谷公園に向かいますので、何卒よろしくお願いいたします。」
ただし、スペース前後の文字が日本語以外であればそのままにする。
「これは MR32 という製品で 93年に対応した製品です 【未使用品】」
↓↓↓↓
「これは MR32 という製品で 93年に対応した製品です 【未使用品】」
⇒変更無し
スペースの前後は記号もNGで、すべて日本語である事が条件です。
よろしくお願いいたします。
「日本語」というのをどう考えるか、というのがあるのですが、肯定的先読みと肯定的後読みを使うと それっぽいことができます。
こちらは、「日本語」=「英数字ではない」とした場合のコード。
<?php function chink_space($s) { $s = preg_replace('/(?<=[^A-z0-9]) +(?=[^A-z0-9])/', '', $s); return $s; }
複数の空白が続いた場合も消すようにしてます。
PHP 5.1.0 以降で、対象のテキストが Unicode の場合には、Unicode 文字プロパティ というのが使えます。
http://php.net/manual/ja/regexp.reference.unicode.php
その Unicode 文字プロパティを使ってみると、こう書けます。
<?php function chink_space($s) { $s = preg_replace('/(?<=[\p{Han}\p{Hiragana}\p{Katakana}]) +(?=[\p{Han}\p{Hiragana}\p{Katakana}])/u', '', $s); return $s; }
パターン修飾子の u がポイント。
プログラム的には、同じものが二回出てくるので、こんな感じに書いた方が良いのかもしれません。
<?php function chink_space($s) { $k = '[^A-z0-9]' $s = preg_replace('/(?<=' . $k . ') +(?=' . $k . ')/', '', $s); return $s; }
正規表現が見づらくなるわけですが。
ideone.com で試したのがこちら。
http://ideone.com/Izxwep
ありがとうございます。
2016/04/18 19:56:37大変助かりました。