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

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

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

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

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

3回答

691閲覧

PHPで正規表現の置換が出来ません

fullmoon311

総合スコア62

PHP

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

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2022/11/01 07:19

前提

2個目のハイフン以降の文字列(2個目のハイフンも含む)を空白に置換したいのですが(削除)、下記の方法では逆になってしまいます。

$word1 = preg_replace('/([^-]+-){2}/','',$word);

■イメージ
置換前文字列
aaa-bbb-w
置換後文字列
aaa-bbb

ご教授お願い致します。

実現したいこと

ここに実現したいことを箇条書きで書いてください。

  • ▲▲機能を動作するようにする

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

m.ts10806

2022/11/01 07:26

正規表現による対応はマストなのでしょうか。
fullmoon311

2022/11/01 07:29

正規表現でなくともPHPの関数で他に何かありましたらお願いします。
guest

回答3

0

「置換での削除」ではなく「以降を含まない文字列を生成」と捉え方を変えてみると

PHP

1<?php 2/** 3 * - で区切れらた文字列の指定場所以降を削る 4 * @param string $word 対象文字列 5 * @param int $pos 何番目以降をなしとするか 6 * @return string 7 */ 8function conv(string $word = "",int $pos = 2):string 9{ 10 $w = explode("-",$word); 11 $a = []; 12 for($i=0;$i<$pos;$i++){ 13 if(!isset($w[$i])) break; 14 $a[] = $w[$i]; 15 } 16 return implode("-",$a); 17} 18 19echo conv().PHP_EOL; 20echo conv("aaa").PHP_EOL; 21echo conv("aaa-bbb").PHP_EOL; 22echo conv("aaa-bbb-w").PHP_EOL; 23echo conv("aaa-bbb-w-y-").PHP_EOL; 24echo conv("aaa-bbb-w-x-y-",3).PHP_EOL; 25echo conv("aaa-bbb-w-xxx-zzz-ddd-aaa----aaaeee",5).PHP_EOL; 26echo conv("aaa-bbb-w-xxx-zzz-ddd-aaa----aaaeee",6).PHP_EOL; 27echo conv("aaa-bbb-w-xxx-zzz-ddd-aaa----aaaeee",10).PHP_EOL;

個人的にはどうしても正規表現ではないとできないものを除いては、
機能一発に拘らずアウトプットを如何に分かりやすい記述で出すかという点を重視したく考えます。

仕様として「-と-の間が空だったらどうするか(末尾が - の場合は?)」というところも気にはなりますが、
正規表現だと仕様変更や追加のときに考慮すべきことが増えてメンテナンス性も落ちるように感じて、
私個人としては積極採用はしてない部類です。

投稿2022/11/01 10:03

m.ts10806

総合スコア80888

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

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

m.ts10806

2022/11/01 10:03

このような関数を1つ作っておいて、区切り文字列も引数で渡せば汎用性は高まります。
guest

0

ベストアンサー

PHP

1$pattern="/(.+?-.+?)-.*$/"; 2$replace="$1"; 3print preg_replace($pattern,$replace,"aaa")."<br>"; //aaa 4print preg_replace($pattern,$replace,"aaa-")."<br>"; //aaa- 5print preg_replace($pattern,$replace,"aaa-bbb")."<br>"; //aaa-bbb 6print preg_replace($pattern,$replace,"aaa-bbb-")."<br>"; //aaa-bbb 7print preg_replace($pattern,$replace,"aaa-bbb-ccc")."<br>"; //aaa-bbb 8print preg_replace($pattern,$replace,"aaa-bbb-ccc-ddd")."<br>"; //aaa-bbb

投稿2022/11/01 07:31

yambejp

総合スコア117702

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

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

0

出来ました!
ありがとうございます!

投稿2022/11/01 07:42

fullmoon311

総合スコア62

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問