重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

$TEXT = "aaaaa「G123」";
$TEXT =~ s/(G123)(\d*)/<button name="NO" class="button" value="$2">G$2<\/button>\n/g;
print qq($TEXT);

現在これで、G123が入力されたら、ボタンにするというのなのですが、

これだと
$TEXT内は<aaaaa「G123」>
なので、
<aaaaa<button name="NO" class="button" value="$2">G123<\/button>」>
というように変換されます。

これを
aaaaa+G123

<button name="NO" class="button" value="$2">aaaaa「G123」<\/button>
※aaaaaのとこはどんな文字でもいいように・・・


という風にしたいのですがどのようにすればいいのでしょうか?

A 回答 (4件)

「G123が含むかつ<>で囲んだ中身」は「G123を含むかつ<>で囲んだ中身」ということかな. もしそうならそれ自体は


<.*G123.*>
のような正規表現で取れるからたとえば
s/<.*G123.*>/<button name="NO" class="button" value="$2">$&<\/button>/
とすれば (value のところの「$2 でいいの?」以外は) できるはず.

とはいえこれでも与えられる文字列との関係ではあいまいなところがあって, 少なくとも以下の文字列の場合にどうするかは明らかじゃないということに気を付けてください.
・"?????? <aaaaa<hogehoge「G123」> boo> ?????"
・"?????? <aaaaa「G123」<hogehoge「G123」> boo> ?????"
・"?????? <aaaaa<hogehoge><bbbb「G123」> boo> ?????"
    • good
    • 0
この回答へのお礼

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

最後のですると、「boo>」
となってしまうのですね。

気をつけます!

やりたいことができました。
私の、よくわからない説明なのに
最後までお答えくださりありがとうございました;;

お礼日時:2017/06/28 12:51

それでは文章があいまいなので「どうすればいいのか」がわからないです.



つまり,
$TEXT = "???????? aaaaa「G123」 ????????";
という文字列に対して
「Gが含まれていたらそこの箇所だけ(aaaaa「G123」)ボタンに変える」
と書かれているんですが, その「そこの箇所」と「『そこ』でない箇所」をどう区別すればいいのかがわからないです. 特に, 質問文に
「aaaaaのとこはどんな文字でもいいように」
と書いてあるので, どうして「aaaaa「G123」の部分だけをボタンに変える」のかが判断できないです. 「どんな文字でもいい」のなら, 「???????? aaaaa「G123」」をボタンに変えてもいいのではありませんか?

そう考えると「どんな文字でもいい」とはあっても本当に「どんな文字でもいい」わけではないはずなので, 何がよくて何がよくないのかを決めておく必要があります. 例えば「空白を含まない 1文字以上のアルファベットの列」だというなら, そのように明示しなければなりません.

あと余談ですけど「value="$2"」のところ, 本当に「$2」でいいですか?
    • good
    • 0
この回答へのお礼

なるほど・・・そういうことですか・・

では、
G123が含むかつ<>で囲んだ中身をボタンにするということは可能ですか?

?????? <aaaaa「G123」> ?????

?????? <button name="NO" class="button" value="$2"><aaaaa「G123」><\/button> ?????

すみません
「$2」
色々調べたりしてるうちにこれが記載されていて、
そのまま使っています。。。

理解できておりません・・・

お礼日時:2017/06/28 10:55

$TEXT


の内容が
aaaaa「G123」
であるときに, 本当に
<button name="NO" class="button" value="$2">aaaaa「G123」<\/button>
としたいのであれば, 結局のところ前後に
<button name="NO" class="button" value="$2">

<\/button>
をつければいいだけなのだから s ではなく文字列の連結を使って
q(<button name="NO" class="button" value="$2">) . $TEXT . q(<\/button>)
とでもした方が簡単だと思うよ.
    • good
    • 0
この回答へのお礼

すみません・・・説明が不足しすぎです・・・

たしかに、貴殿がお答えくださった、連結でボタンを作るだけなら簡単にできるのですが;;


$TEXT = "aaaaa「G123」"
だけではなく、

$TEXT = "???????? aaaaa「G123」 ????????";

と前後にさらに文があり
Gが含まれていたらそこの箇所だけ(aaaaa「G123」)
ボタンに変えるというようなことをしたかったのです・・・

それで、初めではG123が含まれてるなおかつ「<>」これで、囲った部分という
説明をしたかったのですが、「<>」これなしでもできる方法があるのかな?
と思い抜いた質問となりました・・・。

お礼日時:2017/06/27 15:35

なんか, いろいろおかしい.



$TEXT = "aaaaa「G123」";
としたなら
$TEXT

<aaaaa「G123」>
ではなく
aaaaa「G123」
となるはずです. あと, s で置換するときに $2 が置き換わるので置換結果も
<aaaaa<button name="NO" class="button" value="$2">G123<\/button>」>
とはならないはずです.

というか, 本当に
aaaaa「G123」
という文字列を
<button name="NO" class="button" value="$2">aaaaa「G123」<\/button>
のようにしたいなら「s で置換する」のがすでに間違ってるような気がする....
    • good
    • 0
この回答へのお礼

sではないのですか・・・
どのようにすれば・・・?;;

また「<>」これはいりません・・・
初め「<>」これで囲った中身と質問しようと思ったので、
消すのを忘れてました・・・すみません・・・

お礼日時:2017/06/27 10:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!