PHPの正規表現で『文字列の先頭もしくは末尾にマッチして、かつマッチしない

残りの部分が2文字以上ならば、マッチした部分の前後にスペースを 入れて置換
する』ということを実現したいと思っています。
例えば、検索パターンが"ABC"の場合、
"ABCDE"や"DEFABC"はマッチしますが(それぞれ"ABC DE"と"DEF ABC"に変換)、
"CDABCEF"や"ABCD"はマッチしないといった具合です。
上記の内容を実現するために現在は以下のように2回置換しているのですが、
これを1つの正規表現で書くことはできませんでしょうか?
$str = preg_replace("/^(ABC)(\s{2,})/","$1 $2",$str);
$str = preg_replace("/(\s{2,})(ABC)$/","$1 $2",$str);
よろしくお願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/11/14 09:37:53

ベストアンサー

id:a-kuma3 No.1

回答回数4974ベストアンサー獲得回数2154

<?php
$str = trim(preg_replace("/^(ABC)?(\S{2,}?)(ABC)?$/","$1 $2 $3",$str));
?>

trim まで使っちゃってますが (^^ゞ

id:shinwa-tokyo

ご回答ありがとうございます。後方参照を3つに分ける方法は目から鱗でした!

2012/11/13 15:55:04

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません