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

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

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

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

正規表現

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

Q&A

解決済

3回答

1720閲覧

最初に大文字が出現するまでをマッチさせる

SugiuraY

総合スコア317

PHP

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

正規表現

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

0グッド

0クリップ

投稿2017/08/09 08:31

以下のようなケースでpreg_replaceを使用と考えております。

■文字列
label_jpfr-t-inv_VoluntaryRetainedEarningsINV_totalLabel.1
■条件
大文字が出現する直前までを削除
■削除したい文字列
label_jpfr-t-inv_
■結果の文字列
abel.1

php

1$hoge=preg_replace('/(.+?)[A-Z]/', '', $hoge);

恐らく、最後にマッチするケースで返してくるのですが、
どのようにすれば削除したい文字列に一致させることができるのかをご教示ください。

宜しくお願い申し上げます。

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

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

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

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

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

guest

回答3

0

すでに模範解答はでていますが、題意の通りおいかけるとこんな感じです

PHP

1$str=preg_replace("/^.*?(?=[A-Z])/","",$str); 2

投稿2017/08/09 09:03

yambejp

総合スコア114585

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

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

SugiuraY

2017/08/09 10:09

ご回答ありがとうございます。 正直難易度が急に上がりわからない部分があるのですが、 ^ →先頭から始まる .*? →最小限でマッチする (?=[A-Z]) →この部分はどのような意味でしょうか?ハテナは0回以上の出現かと思いますが、=[]としている部分の特にイコールが調べてもわかりませんでした。。 もし、可能であればご教示いただければ嬉しいです。 よろしくお願い王仕上げます。
yambejp

2017/08/09 10:16

○○(?=XXX)は肯定先読み機能と言って ようは後ろにXXXが続く○○という意味です 今回は[A-Z]が後ろにくる何か(最短マッチをしているのでこの何かは[A-Z]ではない) を””に置き換えるつまり題意の通り「大文字が出現する直前までを削除」になります
SugiuraY

2017/08/09 11:38

ありがとうございます!非常にクリアになりました!! また、肯定先読で検索したら、否定やら戻りやらいろいろなパターンが出てきて目から ウロコです><早速勉強します。質問できて本当に良かったです。 よろしくお願い申しあげます。
guest

0

ベストアンサー

条件は、「文字列の先頭から、最初に大文字が出てくるまでの部分を取り除く」ですよね?

ですから、「先頭から始まり、大文字以外で構成された文字列」という正規表現を作ってやればよいです。

PHP

1$hoge = preg_replace('/^[^A-Z]+/', '', $hoge);

で、結果は
VoluntaryRetainedEarningsINV_totalLabel.1
になります。

投稿2017/08/09 08:40

tacsheaven

総合スコア13703

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

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

SugiuraY

2017/08/09 10:05

迅速のご回答をいただきありがとうございます。 勉強のためにもしよければご教示いただきたいのですが、 ^ →行の先頭から始まる [^A-Z] →大文字のA-Zのいずれか以外の文字 + →^[^A-Z]の一回以上の繰り返しという理解でよろしいでしょうか? いつもプラスの位置に迷うのですが、ここで一回以上の繰り返し+はそれまでの正規表現の全てを修飾しているのでしょうか、つまり●■▲+とあった場合や格好でくくった場合の+の及ぼす影響の範囲に迷うため、ご教示いただければ幸いです。
tacsheaven

2017/08/10 00:05

メタ文字の理解はその通りです。+ などの繰り返しは、「その直前の正規表現」を繰り返すので、この場合は[^A-Z] が繰り返されます。●■▲+の場合は、▲だけが繰り返し対象です(▲という文字は、▲を表す正規表現です)。●■▲を繰り返したければ、(●■▲)+ とする必要があります。
SugiuraY

2017/08/12 04:25

コメント有難うございます。 承知を致しました、大変、勉強になりました。 宜しくお願い申し上げます
guest

0

こんな感じでしょうか。

php

1$hoge='label_jpfr-t-inv_VoluntaryRetainedEarningsINV_totalLabel.1'; 2$hoge=preg_replace('/^([^A-Z]+)/', '', $hoge); 3echo $hoge; // VoluntaryRetainedEarningsINV_totalLabel.1

投稿2017/08/09 08:41

kei344

総合スコア69366

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問